Skip to content

Commit

Permalink
add final states
Browse files Browse the repository at this point in the history
  • Loading branch information
Encapsulateed committed Nov 4, 2024
1 parent ecfd0d4 commit 9de92e5
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 22 deletions.
2 changes: 0 additions & 2 deletions main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import 'dart:io';

import 'src/types/grammar.dart';

import 'src/types/trellis_automaton.dart';
import 'src/utils/table_writer.dart';

Expand Down
23 changes: 3 additions & 20 deletions src/types/trellis_automaton.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ class TrellisAutomaton {
late State Function(String) Init;
late State Function(State q1, State q2) Transition;

late List<(State, State, State)> transitions;

TrellisAutomaton.build(Grammar g) {
alphabet = Set.from(g.terminals);
Init = _build_init(List<Rule>.from(g.rules));
Transition = _build_transitions(List<Rule>.from(g.rules));
states = _build_states(alphabet);
transitions = _write_transitions(List<Rule>.from(g.rules));

finals =
states.where((q) => q.generating.contains(g.startNonTerminal)).toSet();
}

State Function(String) _build_init(List<Rule> rules) {
Expand Down Expand Up @@ -61,21 +61,4 @@ class TrellisAutomaton {

return reachableStates;
}

List<(State, State, State)> _write_transitions(List<Rule> rules) {
var transitions = <(State, State, State)>[];

for (var q1 in states) {
for (var q2 in states) {
for (var rule in rules) {
if (rule.applicableForTransition(q1, q2)) {
transitions.add((q1, q2, Transition(q1, q2)));
break;
}
}
}
}

return transitions;
}
}

0 comments on commit 9de92e5

Please sign in to comment.