diff --git a/lab5/input.txt b/lab5/input.txt deleted file mode 100644 index 859a015..0000000 --- a/lab5/input.txt +++ /dev/null @@ -1,3 +0,0 @@ -S->bbS -S->SSS -S->bb diff --git a/lab5/result.txt b/lab5/result.txt deleted file mode 100644 index 6647d8c..0000000 --- a/lab5/result.txt +++ /dev/null @@ -1,8 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] - subgraph cluster_0 { - label="Level 0"; - "[0, 0, $]" [label="[0, 0, $]"]; - } -} diff --git a/lab5/src/lr0/LR0Fms.dart b/lab5/src/lr0/LR0Fms.dart index e20316a..e8df37f 100644 --- a/lab5/src/lr0/LR0Fms.dart +++ b/lab5/src/lr0/LR0Fms.dart @@ -163,7 +163,6 @@ class LR0FMS extends FSM { //addMove(state, transition_set[0].to, l); - if (X != 'eps') { statyByLR0[newl.toString()] = transition_set[0].to; } @@ -176,6 +175,7 @@ class LR0FMS extends FSM { } } } catch (e) { + print(e); return; // continue; } @@ -186,9 +186,16 @@ class LR0FMS extends FSM { if (state == N0) { return; } + var trans = super + .transactions + .where((trans) => trans.from == state && trans.to == N0) + .toList() + .firstOrNull; if (_grammar.nonTerminals.contains(X)) { - for (var l_0 in state.value as List) { + var copySt = [...state.value as List]; + + for (var l_0 in copySt) { if (l_0.left == X) { var prev_lr0 = LR0Situation(l_0.left, l_0.right, l_0.LR0_pointer - 1); if (prev_lr0.LR0_pointer == -1) { @@ -196,18 +203,31 @@ class LR0FMS extends FSM { } var prev_copy = prev_lr0.clone(); - prev_copy.move(); - - - if ((N0.value as List).contains(prev_lr0) == false && - (N0.value as List).contains(prev_copy) == false) { - (N0.value as List).add(prev_lr0.clone()); - N0.name += '\n${prev_lr0.toString()}'; - statyByLR0[prev_lr0.toString()] = N0; + prev_copy.move(); + + if ((N0.value as List).contains(prev_lr0) == false) { + { + if (trans == null) { + //print('Сейчас я добавлю LR0 ${prev_lr0} к ${getStateIndex(N0)} из ${getStateIndex(state)}'); + (N0.value as List).add(prev_lr0.clone()); + N0.name += '\n${prev_lr0.toString()}'; + statyByLR0[prev_lr0.toString()] = N0; + } else { + if ((state.value as List).contains(prev_copy) == + false) { + + (N0.value as List).add(prev_lr0.clone()); + // print('Сейчас я добавлю LR0 ${prev_lr0} к ${getStateIndex(N0)} из ${getStateIndex(state)}'); + + N0.name += '\n${prev_lr0.toString()}'; + statyByLR0[prev_lr0.toString()] = N0; + } + } + } } - + if (_grammar.nonTerminals.contains(prev_lr0.getNext()) && - X != prev_lr0.getNext() ) { + X != prev_lr0.getNext()) { load_rules(state, N0, prev_lr0.getNext()); } } diff --git a/lab5/t b/lab5/t deleted file mode 100644 index b58213c..0000000 --- a/lab5/t +++ /dev/null @@ -1,194 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" [label = "0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb", shape = circle] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·SSS -S -> ·bb" [label = "1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·SSS -S -> ·bb", shape = circle] -"2 S -> b·bS -S -> b·b" [label = "2 S -> b·bS -S -> b·b", shape = circle] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb -S -> S·SS" [label = "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb -S -> S·SS", shape = circle] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b" [label = "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b", shape = circle] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" [label = "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S", shape = circle] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b" [label = "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b", shape = circle] -dummy -> "0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·SSS -S -> ·bb" [label = "S"] -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb -S -> S·SS" [label = "S"] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"2 S -> b·bS -S -> b·b" -> "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b" [label = "b"] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb -S -> S·SS" -> "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" [label = "S"] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb -S -> S·SS" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b" -> "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b" [label = "S"] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" -> "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" [label = "S"] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" -> "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b" [label = "b"] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b" -> "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> SS·S" [label = "S"] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> b·b" -> "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·bS -S -> b·b" [label = "b"] -} diff --git a/lab5/values/grammar_1/fsm.txt b/lab5/values/grammar_1/fsm.txt deleted file mode 100644 index b275d9a..0000000 --- a/lab5/values/grammar_1/fsm.txt +++ /dev/null @@ -1,152 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" [label = "0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb", shape = circle] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·bb" [label = "1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·bb", shape = doublecircle] -"2 S -> b·bS -S -> b·b" [label = "2 S -> b·bS -S -> b·b", shape = circle] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" [label = "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb", shape = circle] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b" [label = "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b", shape = doublecircle] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb" [label = "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb", shape = doublecircle] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b" [label = "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b", shape = doublecircle] -dummy -> "0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·bb" [label = "S"] -"0 S0 -> ·S -S -> ·bbS -S -> ·SSS -S -> ·bb" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·bb" -> "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" [label = "S"] -"1 S0 -> S· -S -> S·SS -S -> ·bbS -S -> ·bb" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"2 S -> b·bS -S -> b·b" -> "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b" [label = "b"] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" -> "5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb" [label = "S"] -"3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b" -> "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b" [label = "S"] -"4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b" -> "2 S -> b·bS -S -> b·b" [label = "b"] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb" -> "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" [label = "S"] -"5 S -> SSS· -S -> S·SS -S -> ·bbS -S -> ·bb" -> "6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b" [label = "b"] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b" -> "3 S -> SS·S -S -> ·SSS -S -> ·bbS -S -> ·bb" [label = "S"] -"6 S -> bbS· -S -> S·SS -S -> b·bS -S -> ·bb -S -> b·b" -> "4 S -> bb·S -S -> ·bbS -S -> ·bb -S -> ·SSS -S -> bb· -S -> b·b" [label = "b"] -} diff --git a/lab5/values/grammar_1/table.txt b/lab5/values/grammar_1/table.txt deleted file mode 100644 index c0b7577..0000000 --- a/lab5/values/grammar_1/table.txt +++ /dev/null @@ -1,8 +0,0 @@ -State S b $ -0 [1] [s(2)] [] -1 [3] [s(2)] [ACC] -2 [] [s(4)] [] -3 [5] [s(2)] [] -4 [6] [r(3) s(2)] [r(3)] -5 [3] [r(2) s(6)] [r(2)] -6 [3] [r(1) s(4)] [r(1)]