Skip to content

Commit c8ee21d

Browse files
committed
я ебал
1 parent ff3e292 commit c8ee21d

File tree

5 files changed

+293
-3
lines changed

5 files changed

+293
-3
lines changed

lab5/input.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
S->bbS
2-
S->SbS
2+
S->SSS
33
S->bb

lab5/result.txt

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
digraph {
2+
rankdir = LR
3+
dummy [shape=none, label="", width=0, height=0]
4+
subgraph cluster_0 {
5+
label="Level 0";
6+
"[0, 0, b]" [label="[0, 0, b]"];
7+
}
8+
subgraph cluster_1 {
9+
label="Level 1";
10+
"[1, 2, b]" [label="[1, 2, b]"];
11+
}
12+
subgraph cluster_2 {
13+
label="Level 2";
14+
"[2, 3, b]" [label="[2, 3, b]"];
15+
"[2, 1, b]" [label="[2, 1, b]"];
16+
}
17+
subgraph cluster_3 {
18+
label="Level 3";
19+
"[3, 2, b]" [label="[3, 2, b]"];
20+
}
21+
subgraph cluster_4 {
22+
label="Level 4";
23+
"[4, 1, $]" [label="[4, 1, $]"];
24+
}
25+
subgraph cluster_5 {
26+
label="Level 5";
27+
"[ACC, ACC]" [label="[ACC, ACC]"];
28+
}
29+
"[ACC, ACC]" -> "[4, 1, $]";
30+
"[4, 1, $]" -> "[0, 0, b]";
31+
"[3, 2, b]" -> "[2, 3, b]";
32+
"[2, 3, b]" -> "[1, 2, b]";
33+
"[2, 1, b]" -> "[0, 0, b]";
34+
"[1, 2, b]" -> "[0, 0, b]";
35+
}

lab5/src/lr0/LR0Fms.dart

+39-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'LR0Situation.dart';
66
class LR0FMS extends FSM {
77
LR0FMS.empty();
88
Map<String, State> statyByLR0 = {};
9+
Map<State, Map<State, List<LR0Situation>>> moved = {};
910
Grammar _grammar = Grammar();
1011

1112
LR0FMS(Grammar CompleteGrammar) {
@@ -79,6 +80,7 @@ class LR0FMS extends FSM {
7980
void shift(State state, {bool need_load = true}) {
8081
for (var l in state.value as List<LR0Situation>) {
8182
try {
83+
8284
var newl = l.clone();
8385
var beta = newl.next;
8486

@@ -130,7 +132,22 @@ class LR0FMS extends FSM {
130132
if ((transition_set[0].to.value as List<LR0Situation>)
131133
.contains(newl) ==
132134
false) {
135+
136+
// to; from
137+
if (moved[transition_set[0].to] == null) {
138+
moved[transition_set[0].to] = {};
139+
}
140+
if (moved[transition_set[0].to]![state] == null) {
141+
moved[transition_set[0].to]![state] = [];
142+
}
143+
moved[transition_set[0].to]![state]!.add(l);
144+
if(state == getStateByIndex(4)){
145+
print(l);
146+
}
147+
133148
transition_set[0].to.name += '\n${newl.toString()}';
149+
150+
134151
(transition_set[0].to.value as List<LR0Situation>)
135152
.add(newl.clone());
136153

@@ -145,7 +162,9 @@ class LR0FMS extends FSM {
145162
});
146163
}
147164
}
148-
} catch (e) {
165+
} catch (e, s) {
166+
// print(e);
167+
//print(s);
149168
return;
150169
}
151170
}
@@ -165,9 +184,25 @@ class LR0FMS extends FSM {
165184
}
166185

167186
if ((N0.value as List<LR0Situation>).contains(prev_lr0) == false) {
187+
188+
if (moved[state] != null) {
189+
if (moved[state]![N0] != null) {
190+
if (moved[state]![N0]!.contains(prev_lr0)) {
191+
continue;
192+
}
193+
}
194+
}
195+
168196
(N0.value as List<LR0Situation>).add(prev_lr0.clone());
169197
N0.name += '\n${prev_lr0.toString()}';
170198
statyByLR0[prev_lr0.toString()] = N0;
199+
if (moved[state] == null) {
200+
moved[state] = {};
201+
}
202+
if (moved[state]![N0] == null) {
203+
moved[state]![N0] = [];
204+
}
205+
moved[state]![N0]!.add(prev_lr0);
171206
}
172207

173208
if (_grammar.nonTerminals.contains(prev_lr0.getNext()) &&
@@ -183,7 +218,9 @@ class LR0FMS extends FSM {
183218
for (var tr in super.transactions.where((t) => t.to == X)) {
184219
if (X != tr.from) {
185220
first.add(tr.from);
186-
First(tr.from, first);
221+
if (!first.contains(X)) {
222+
First(tr.from, first);
223+
}
187224
}
188225
}
189226
}

lab5/values/grammar_1/fsm.txt

+210
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
digraph {
2+
rankdir = LR
3+
dummy [shape=none, label="", width=0, height=0]
4+
"0 S0 -> ·S
5+
S -> ·bbS
6+
S -> ·SSS
7+
S -> ·bb" [label = "0 S0 -> ·S
8+
S -> ·bbS
9+
S -> ·SSS
10+
S -> ·bb", shape = circle]
11+
"1 S0 -> S·" [label = "1 S0 -> S·", shape = doublecircle]
12+
"2 S -> b·bS
13+
S -> b·b" [label = "2 S -> b·bS
14+
S -> b·b", shape = circle]
15+
"3 S -> bb·S
16+
S -> ·bbS
17+
S -> ·SSS
18+
S -> ·bb
19+
S -> bb·" [label = "3 S -> bb·S
20+
S -> ·bbS
21+
S -> ·SSS
22+
S -> ·bb
23+
S -> bb·", shape = doublecircle]
24+
"4 S -> bbS·
25+
S -> S·SS
26+
S -> b·bS
27+
S -> ·bbS
28+
S -> ·SSS
29+
S -> ·bb" [label = "4 S -> bbS·
30+
S -> S·SS
31+
S -> b·bS
32+
S -> ·bbS
33+
S -> ·SSS
34+
S -> ·bb", shape = doublecircle]
35+
"5 S -> SS·S
36+
S -> bb·S
37+
S -> ·SSS
38+
S -> ·bbS
39+
S -> ·bb
40+
S -> b·bS
41+
S -> b·b
42+
S -> S·SS" [label = "5 S -> SS·S
43+
S -> bb·S
44+
S -> ·SSS
45+
S -> ·bbS
46+
S -> ·bb
47+
S -> b·bS
48+
S -> b·b
49+
S -> S·SS", shape = circle]
50+
"6 S -> SSS·
51+
S -> bbS·
52+
S -> S·SS
53+
S -> b·bS
54+
S -> ·SSS
55+
S -> ·bbS
56+
S -> ·bb
57+
S -> bb·S
58+
S -> b·b
59+
S -> bb·
60+
S -> SS·S" [label = "6 S -> SSS·
61+
S -> bbS·
62+
S -> S·SS
63+
S -> b·bS
64+
S -> ·SSS
65+
S -> ·bbS
66+
S -> ·bb
67+
S -> bb·S
68+
S -> b·b
69+
S -> bb·
70+
S -> SS·S", shape = doublecircle]
71+
dummy -> "0 S0 -> ·S
72+
S -> ·bbS
73+
S -> ·SSS
74+
S -> ·bb"
75+
"0 S0 -> ·S
76+
S -> ·bbS
77+
S -> ·SSS
78+
S -> ·bb" -> "1 S0 -> S·" [label = "S"]
79+
"0 S0 -> ·S
80+
S -> ·bbS
81+
S -> ·SSS
82+
S -> ·bb" -> "2 S -> b·bS
83+
S -> b·b" [label = "b"]
84+
"2 S -> b·bS
85+
S -> b·b" -> "3 S -> bb·S
86+
S -> ·bbS
87+
S -> ·SSS
88+
S -> ·bb
89+
S -> bb·" [label = "b"]
90+
"3 S -> bb·S
91+
S -> ·bbS
92+
S -> ·SSS
93+
S -> ·bb
94+
S -> bb·" -> "4 S -> bbS·
95+
S -> S·SS
96+
S -> b·bS
97+
S -> ·bbS
98+
S -> ·SSS
99+
S -> ·bb" [label = "S"]
100+
"3 S -> bb·S
101+
S -> ·bbS
102+
S -> ·SSS
103+
S -> ·bb
104+
S -> bb·" -> "2 S -> b·bS
105+
S -> b·b" [label = "b"]
106+
"4 S -> bbS·
107+
S -> S·SS
108+
S -> b·bS
109+
S -> ·bbS
110+
S -> ·SSS
111+
S -> ·bb" -> "5 S -> SS·S
112+
S -> bb·S
113+
S -> ·SSS
114+
S -> ·bbS
115+
S -> ·bb
116+
S -> b·bS
117+
S -> b·b
118+
S -> S·SS" [label = "S"]
119+
"4 S -> bbS·
120+
S -> S·SS
121+
S -> b·bS
122+
S -> ·bbS
123+
S -> ·SSS
124+
S -> ·bb" -> "5 S -> SS·S
125+
S -> bb·S
126+
S -> ·SSS
127+
S -> ·bbS
128+
S -> ·bb
129+
S -> b·bS
130+
S -> b·b
131+
S -> S·SS" [label = "b"]
132+
"5 S -> SS·S
133+
S -> bb·S
134+
S -> ·SSS
135+
S -> ·bbS
136+
S -> ·bb
137+
S -> b·bS
138+
S -> b·b
139+
S -> S·SS" -> "6 S -> SSS·
140+
S -> bbS·
141+
S -> S·SS
142+
S -> b·bS
143+
S -> ·SSS
144+
S -> ·bbS
145+
S -> ·bb
146+
S -> bb·S
147+
S -> b·b
148+
S -> bb·
149+
S -> SS·S" [label = "S"]
150+
"5 S -> SS·S
151+
S -> bb·S
152+
S -> ·SSS
153+
S -> ·bbS
154+
S -> ·bb
155+
S -> b·bS
156+
S -> b·b
157+
S -> S·SS" -> "6 S -> SSS·
158+
S -> bbS·
159+
S -> S·SS
160+
S -> b·bS
161+
S -> ·SSS
162+
S -> ·bbS
163+
S -> ·bb
164+
S -> bb·S
165+
S -> b·b
166+
S -> bb·
167+
S -> SS·S" [label = "b"]
168+
"6 S -> SSS·
169+
S -> bbS·
170+
S -> S·SS
171+
S -> b·bS
172+
S -> ·SSS
173+
S -> ·bbS
174+
S -> ·bb
175+
S -> bb·S
176+
S -> b·b
177+
S -> bb·
178+
S -> SS·S" -> "6 S -> SSS·
179+
S -> bbS·
180+
S -> S·SS
181+
S -> b·bS
182+
S -> ·SSS
183+
S -> ·bbS
184+
S -> ·bb
185+
S -> bb·S
186+
S -> b·b
187+
S -> bb·
188+
S -> SS·S" [label = "S"]
189+
"6 S -> SSS·
190+
S -> bbS·
191+
S -> S·SS
192+
S -> b·bS
193+
S -> ·SSS
194+
S -> ·bbS
195+
S -> ·bb
196+
S -> bb·S
197+
S -> b·b
198+
S -> bb·
199+
S -> SS·S" -> "6 S -> SSS·
200+
S -> bbS·
201+
S -> S·SS
202+
S -> b·bS
203+
S -> ·SSS
204+
S -> ·bbS
205+
S -> ·bb
206+
S -> bb·S
207+
S -> b·b
208+
S -> bb·
209+
S -> SS·S" [label = "b"]
210+
}

lab5/values/grammar_1/table.txt

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
State S b $
2+
0 [1] [s(2)] []
3+
1 [] [] [ACC]
4+
2 [] [s(3)] []
5+
3 [4] [r(3) s(2)] [r(3)]
6+
4 [5] [r(1) s(5)] [r(1)]
7+
5 [6] [s(6)] []
8+
6 [6] [r(2) r(1) r(3) s(6)] [r(2) r(1) r(3)]

0 commit comments

Comments
 (0)