Skip to content

Commit

Permalink
fix fsm
Browse files Browse the repository at this point in the history
  • Loading branch information
Encapsulateed committed Jan 21, 2024
1 parent 1734df3 commit 0ad911b
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 48 deletions.
2 changes: 1 addition & 1 deletion lab5/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

.dart_tool/
.idea/
*.iml
# Default ignored files
Expand Down
4 changes: 2 additions & 2 deletions lab5/input.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
S->AA
A->AA
A->aa
A->aA
A->b
19 changes: 16 additions & 3 deletions lab5/src/lr0/LR0Fms.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,9 @@ class LR0FMS extends FSM {
if (beta == "eps") {
continue;
}

print(newl);
newl.move();

var X = newl.getNext();

var transition_set = super
Expand All @@ -145,7 +146,7 @@ class LR0FMS extends FSM {
if (transition_set.length == 0) {
State N0 = State();
bool existed = false;
// тут логика, есди какое-то состояние уже содержит эту продукцию

if (statyByLR0[newl.toString()] != null) {
N0 = statyByLR0[newl.toString()]!;
existed = true;
Expand All @@ -157,6 +158,8 @@ class LR0FMS extends FSM {
}
super.states.add(N0);
statyByLR0[newl.toString()] = N0;

if (newl.getNext() != 'eps') {}
}

Transaction transaction = Transaction.ivan(state, N0, beta);
Expand All @@ -176,7 +179,17 @@ class LR0FMS extends FSM {
transition_set[0].to.name += '\n${newl.toString()}';
(transition_set[0].to.value as List<LR0Situation>)
.add(newl.clone());
statyByLR0[newl.toString()] = transition_set[0].to;
if (newl.getNext() != 'eps') {
statyByLR0[newl.toString()] = transition_set[0].to;
} else {
break;
}

List<State> first = [];
First(transition_set[0].to, first);
first.forEach((element) {
load_rules(element, transition_set[0].to, X);
});
}
}
} catch (e) {
Expand Down
94 changes: 52 additions & 42 deletions lab5/values/fsm.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,59 +3,69 @@ rankdir = LR
dummy [shape=none, label="", width=0, height=0]
"0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa" [label = "0 S0 -> ·S
A -> ·aA
A -> ·b" [label = "0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa", shape = circle]
A -> ·aA
A -> ·b", shape = circle]
"1 S0 -> S·" [label = "1 S0 -> S·", shape = doublecircle]
"2 S -> A·A
A -> ·AA
A -> ·aa
A -> A·A" [label = "2 S -> A·A
A -> ·AA
A -> ·aa
A -> A·A", shape = circle]
"3 A -> a·a" [label = "3 A -> a·a", shape = circle]
"4 S -> AA·
A -> A·A
A -> AA·" [label = "4 S -> AA·
A -> A·A
A -> AA·", shape = doublecircle]
"5 A -> aa·" [label = "5 A -> aa·", shape = doublecircle]
A -> ·aA
A -> ·b" [label = "2 S -> A·A
A -> ·aA
A -> ·b", shape = circle]
"3 A -> a·A
A -> ·aA
A -> ·b" [label = "3 A -> a·A
A -> ·aA
A -> ·b", shape = circle]
"4 A -> b·" [label = "4 A -> b·", shape = doublecircle]
"5 S -> AA·" [label = "5 S -> AA·", shape = doublecircle]
"6 A -> aA·" [label = "6 A -> aA·", shape = doublecircle]
dummy -> "0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa"
A -> ·aA
A -> ·b"
"0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa" -> "1 S0 -> S·" [label = "S"]
A -> ·aA
A -> ·b" -> "1 S0 -> S·" [label = "S"]
"0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa" -> "2 S -> A·A
A -> ·AA
A -> ·aa
A -> A·A" [label = "A"]
A -> ·aA
A -> ·b" -> "2 S -> A·A
A -> ·aA
A -> ·b" [label = "A"]
"0 S0 -> ·S
S -> ·AA
A -> ·AA
A -> ·aa" -> "3 A -> a·a" [label = "a"]
A -> ·aA
A -> ·b" -> "3 A -> a·A
A -> ·aA
A -> ·b" [label = "a"]
"0 S0 -> ·S
S -> ·AA
A -> ·aA
A -> ·b" -> "4 A -> b·" [label = "b"]
"2 S -> A·A
A -> ·aA
A -> ·b" -> "5 S -> AA·" [label = "A"]
"2 S -> A·A
A -> ·AA
A -> ·aa
A -> A·A" -> "4 S -> AA·
A -> A·A
A -> AA·" [label = "A"]
A -> ·aA
A -> ·b" -> "3 A -> a·A
A -> ·aA
A -> ·b" [label = "a"]
"2 S -> A·A
A -> ·AA
A -> ·aa
A -> A·A" -> "3 A -> a·a" [label = "a"]
"3 A -> a·a" -> "5 A -> aa·" [label = "a"]
"4 S -> AA·
A -> A·A
A -> AA·" -> "4 S -> AA·
A -> A·A
A -> AA·" [label = "A"]
A -> ·aA
A -> ·b" -> "4 A -> b·" [label = "b"]
"3 A -> a·A
A -> ·aA
A -> ·b" -> "6 A -> aA·" [label = "A"]
"3 A -> a·A
A -> ·aA
A -> ·b" -> "3 A -> a·A
A -> ·aA
A -> ·b" [label = "a"]
"3 A -> a·A
A -> ·aA
A -> ·b" -> "4 A -> b·" [label = "b"]
}

0 comments on commit 0ad911b

Please sign in to comment.