diff --git a/lab5/input.txt b/lab5/input.txt index 29d39a0..5681205 100644 --- a/lab5/input.txt +++ b/lab5/input.txt @@ -1,3 +1,5 @@ -S->bbS -S->SbS -S->bb \ No newline at end of file +S->aQ&Rb +S->a +S->b +Q->Sb +R->aS \ No newline at end of file diff --git a/lab5/main.dart b/lab5/main.dart index 0a4b2a4..acab9f9 100644 --- a/lab5/main.dart +++ b/lab5/main.dart @@ -31,14 +31,18 @@ void main(List arguments) { } var cg = conjunctiveGrammar.fromFile('input.txt'); - //print(cg.possible_grammars[0]); + List results = []; for (var grammar in cg.possible_grammars) { + // print(grammar); LR0Parser curr_parser = LR0Parser(grammar); curr_parser.Log(cg.possible_grammars.indexOf(grammar) + 1); - results.add(curr_parser.parse(word.split(''), step_num)); + bool res = curr_parser.parse(word.split(''), step_num); + results.add(res); + // results.add(curr_parser.parse(word.split(''), step_num)); } + print(results); if (conj == true) { if (results.every((element) => element == true)) { print('Существует хотя бы один корректный разбор '); diff --git a/lab5/result.txt b/lab5/result.txt deleted file mode 100644 index acc3a74..0000000 --- a/lab5/result.txt +++ /dev/null @@ -1,47 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] - subgraph cluster_0 { - label="Level 0"; - "[0, 0]" [label="[0, 0]"]; - } - subgraph cluster_1 { - label="Level 1"; - "[1, 2]" [label="[1, 2]"]; - "[1, 3]" [label="[1, 3]"]; - } - subgraph cluster_2 { - label="Level 2"; - "[2, 2]" [label="[2, 2]"]; - "[2, 7]" [label="[2, 7]"]; - "[2, 1]" [label="[2, 1]"]; - } - subgraph cluster_3 { - label="Level 3"; - "[3, 2]" [label="[3, 2]"]; - "[3, 3]" [label="[3, 3]"]; - } - subgraph cluster_4 { - label="Level 4"; - "[4, 2]" [label="[4, 2]"]; - "[4, 7]" [label="[4, 7]"]; - "[4, 9]" [label="[4, 9]"]; - } - subgraph cluster_5 { - label="Level 5"; - "[5, 2]" [label="[5, 2]"]; - "[5, 3]" [label="[5, 3]"]; - } - "[5, 2]" -> "[4, 7]"; - "[5, 3]" -> "[4, 7]"; - "[4, 2]" -> "[3, 3]"; - "[4, 7]" -> "[3, 3]"; - "[4, 9]" -> "[2, 7]"; - "[3, 2]" -> "[2, 7]"; - "[3, 3]" -> "[2, 7]"; - "[2, 2]" -> "[1, 3]"; - "[2, 7]" -> "[1, 3]"; - "[2, 1]" -> "[0, 0]"; - "[1, 2]" -> "[0, 0]"; - "[1, 3]" -> "[0, 0]"; -} diff --git a/lab5/results/stack_dump_on_1.txt b/lab5/results/stack_dump_on_1.txt deleted file mode 100644 index 3d22524..0000000 --- a/lab5/results/stack_dump_on_1.txt +++ /dev/null @@ -1,38 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] - subgraph cluster_0 { - label="Level 0"; - "[0, 0, b]" [label="[0, 0, b]"]; - } - subgraph cluster_1 { - label="Level 1"; - "[2, 1, b]" [label="[2, 1, b]"]; - "[1, 2, b]" [label="[1, 2, b]"]; - "[1, 5, b]" [label="[1, 5, b]"]; - } - subgraph cluster_2 { - label="Level 2"; - "[4, 2, b]" [label="[4, 2, b]"]; - "[3, 3, b]" [label="[3, 3, b]"]; - "[3, 6, $]" [label="[3, 6, $]"]; - } - subgraph cluster_3 { - label="Level 3"; - "[2, 4, b]" [label="[2, 4, b]"]; - "[5, 5, b]" [label="[5, 5, b]"]; - } - subgraph cluster_4 { - label="Level 4"; - "[4, 5, b]" [label="[4, 5, b]"]; - } - "[2, 4, b]" -> "[4, 5, b]"; - "[3, 3, b]" -> "[2, 4, b]"; - "[3, 3, b]" -> "[5, 5, b]"; - "[2, 1, b]" -> "[4, 2, b]"; - "[1, 2, b]" -> "[3, 3, b]"; - "[1, 5, b]" -> "[3, 6, $]"; - "[0, 0, b]" -> "[2, 1, b]"; - "[0, 0, b]" -> "[1, 2, b]"; - "[0, 0, b]" -> "[1, 5, b]"; -} diff --git a/lab5/src/lr0/LR0Fms.dart b/lab5/src/lr0/LR0Fms.dart index 4f5bdcd..112359d 100644 --- a/lab5/src/lr0/LR0Fms.dart +++ b/lab5/src/lr0/LR0Fms.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import '../utils/grammar.dart'; import '../utils/Production.dart'; import '../state_machine/FSM.dart'; @@ -17,7 +15,12 @@ class LR0FMS extends FSM { this._grammar = CompleteGrammar; super.alphabet.addAll(_grammar.nonTerminals); super.alphabet.addAll(_grammar.terminals); + buildDFA(); + + // super.transactions.remove(super.transactions.where( + // (t) => t.from == getStateByIndex(0) && t.to == getStateByIndex(1))); + // super.states.remove(getStateByIndex(0)); } List closure(Production production) { @@ -38,73 +41,40 @@ class LR0FMS extends FSM { return production_possible_LR0_situations; } - List CLOSURE() { - Set possibleNT = {}; - Set first_state = {}; - first_state.add(LR0Situation(_grammar.startNonTerminal + '0', - _grammar.startNonTerminal.split(''), 0)); - for (var r in _grammar.rules - .where((element) => element.left == _grammar.startNonTerminal)) { - if (_grammar.nonTerminals.contains(r.right[0])) { - possibleNT.add(r.right[0]); - for (var rr - in _grammar.rules.where((element) => element.left == r.right[0])) { - if (!first_state.any((element) => - element.left == rr.left && element.right == rr.right)) { - first_state.add(LR0Situation(rr.left, rr.right, 0)); - } - } - } - } - // print(first_state); - return first_state.toList(); + void create_super_zero_state() { + List first_state_value = [] + ..addAll(_grammar.user_rules.map((P) => zeroClosure(P)[0].clone())); + var state_name = first_state_value.join('\n'); + State zero = State.valued(state_name, first_state_value); + super.states.add(zero); } - void UPDATE_FIRST() { - for (var state - in super.states.where((element) => getStateIndex(element) != 0)) { - List for_add = []; - for (var lr0 in state.value as List) { - var next = lr0.getNext(); - if (_grammar.nonTerminals.contains(next)) { - for (var rule in _grammar.rules) { - if (rule.right.length == 2) { - if (rule.left == next) { - (for_add).add(LR0Situation(rule.left, rule.right, 0)); - } - } - } - } - } + void create_first_state() { + LR0Situation lr0 = LR0Situation.fromProduction(_grammar.rules[0]); + var state_name = lr0.toString(); + State first = State.valued(state_name, [lr0.clone()]); + super.states.add(first); + super.startStates.add(first); - for (var lr in for_add) { - state.name += '\n' + lr.toString(); - (state.value as List).add(lr); - load_rules(getStateByIndex(0), state, lr.getNext()); - } - } + super.transactions.add( + Transaction.ivan(getStateByIndex(0), first, _grammar.startNonTerminal)); + load_rules(getStateByIndex(0), first, _grammar.startNonTerminal); } void buildDFA() { // Начальное состояние соответвует G+ - пополненной грамматике - List first_state_value = CLOSURE(); - var state_name = first_state_value.join('\n'); - State first_state = State.valued(state_name, first_state_value); - super.states.add(first_state); - super.startStates.add(first_state); - shift(first_state); - UPDATE_FIRST(); + create_super_zero_state(); + create_first_state(); + while (true) { int p_l = super.states.length; - for (int i = 0; i < p_l; i++) { + for (int i = 1; i < p_l; i++) { try { shift(getStateByIndex(i)); - } catch (e) {} - - // super.DumpToDOT('t'); - //print('dump'); - //stdin.readLineSync(); + } catch (e) { + print(e); + } } int n_l = super.states.length; if (p_l == n_l) { @@ -131,11 +101,6 @@ class LR0FMS extends FSM { } } } - List first = []; - First(getStateByIndex(7), first); - first.forEach((element) { - // print(getStateIndex(element)); - }); } Set getDstSet(State s, String X) { @@ -176,7 +141,7 @@ class LR0FMS extends FSM { } void shift(State state, {bool need_load = true}) { - for (var l in state.value as List) { + for (var l in state.value) { try { var newl = l.clone(); var beta = newl.next; @@ -191,23 +156,21 @@ class LR0FMS extends FSM { var transition_set = super .transactions - .where((trans) => trans.from == state && trans.letter == beta) + .where((trans) => + trans.from == state && + trans.letter == beta && + trans.to != getStateByIndex(1)) .toList(); if (transition_set.length == 0) { State N0 = State(); bool existed = false; - /** - * if (statyByLR0[newl.toString()] != null) { - getDst(state, X); - N0 = statyByLR0[newl.toString()]!; - existed = true; - */ if (statyByLR0[newl.toString()] != null) { - // getDst(state, X); - N0 = getDst(state, beta)!; - existed = true; + if (getDst(state, beta) != null) { + N0 = getDst(state, beta)!; + existed = true; + } } else { N0 = State.valued('[${newl.toString()}]', [newl.clone()]); N0.moved[beta] = []; @@ -236,14 +199,13 @@ class LR0FMS extends FSM { }); } } else { - if ((transition_set[0].to.value as List) - .contains(newl) == - false) { + if ((transition_set[0].to.value).contains(newl) == false) { transition_set[0].to.name += '\n[${newl.toString()}]'; - transition_set[0].to.moved[transition_set[0].letter]!.add(newl); + if (transition_set[0].to.moved[transition_set[0].letter] != null) { + transition_set[0].to.moved[transition_set[0].letter]!.add(newl); + } - (transition_set[0].to.value as List) - .add(newl.clone()); + (transition_set[0].to.value).add(newl.clone()); //addMove(state, transition_set[0].to, l); var temp = newl.clone(); @@ -260,27 +222,26 @@ class LR0FMS extends FSM { }); } } - } catch (e) { - //print(state.name); - print(e); + } catch (e, s) { + print(s); return; // continue; } } } - void load_rules(State state, State N0, String X) { - if (state == N0) { + void load_rules(State from, State to, String X) { + if (from == to) { return; } var trans = super .transactions - .where((trans) => trans.from == state && trans.to == N0) + .where((trans) => trans.from == from && trans.to == to) .toList() .firstOrNull; if (_grammar.nonTerminals.contains(X)) { - var copySt = [...state.value as List]; + var copySt = [...from.value as List]; for (var l_0 in copySt) { if (l_0.left == X) { @@ -292,21 +253,20 @@ class LR0FMS extends FSM { var prev_copy = prev_lr0.clone(); prev_copy.move(); - if ((N0.value as List).contains(prev_lr0) == false) { + if ((to.value).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; + (to.value).add(prev_lr0.clone()); + to.name += '\n${prev_lr0.toString()}'; + statyByLR0[prev_lr0.toString()] = to; } else { - if ((state.value as List).contains(prev_copy) == - false) { - (N0.value as List).add(prev_lr0.clone()); + if ((from.value).contains(prev_copy) == false) { + (to.value).add(prev_lr0.clone()); // print('Сейчас я добавлю LR0 ${prev_lr0} к ${getStateIndex(N0)} из ${getStateIndex(state)}'); - N0.name += '\n${prev_lr0.toString()}'; - statyByLR0[prev_lr0.toString()] = N0; + to.name += '\n${prev_lr0.toString()}'; + statyByLR0[prev_lr0.toString()] = to; if (statyByLR0[prev_lr0.toString()] == null) { // statyByLR0[prev_lr0.toString()] = N0; } @@ -317,7 +277,7 @@ class LR0FMS extends FSM { if (_grammar.nonTerminals.contains(prev_lr0.getNext()) && X != prev_lr0.getNext()) { - load_rules(state, N0, prev_lr0.getNext()); + load_rules(from, to, prev_lr0.getNext()); } } } diff --git a/lab5/src/lr0/LR0Situation.dart b/lab5/src/lr0/LR0Situation.dart index b145730..c45a2ca 100644 --- a/lab5/src/lr0/LR0Situation.dart +++ b/lab5/src/lr0/LR0Situation.dart @@ -14,6 +14,10 @@ class LR0Situation extends Production { } } + LR0Situation.fromProduction(Production p): super(p.left,p.right){ + LR0_pointer = 0; + } + @override String toString() { var tmp = []; diff --git a/lab5/src/lr0/LR0State.dart b/lab5/src/lr0/LR0State.dart deleted file mode 100644 index 33eea3d..0000000 --- a/lab5/src/lr0/LR0State.dart +++ /dev/null @@ -1,7 +0,0 @@ -import '../utils/Production.dart'; -import '../utils/grammar.dart'; -import 'LR0Situation.dart'; - -class LR0State { - Set items = {}; -} diff --git a/lab5/src/lr0/LR0Table.dart b/lab5/src/lr0/LR0Table.dart index 2166223..c60bef3 100644 --- a/lab5/src/lr0/LR0Table.dart +++ b/lab5/src/lr0/LR0Table.dart @@ -24,7 +24,8 @@ class LR0Table { } void makeTable() { - for (var I in _fsm.states) { + for (var I + in _fsm.states.where((element) => _fsm.getStateIndex(element) != -1)) { int index = _fsm.getStateIndex(I); lr0_table[index] = {}; @@ -43,8 +44,8 @@ class LR0Table { continue; } - for (int i = 0; i < (I.value as List).length; i++) { - var lr0_situation = I.value[i] as LR0Situation; + for (int i = 0; i < (I.value).length; i++) { + var lr0_situation = I.value[i]; if (lr0_situation.getNext() == 'eps') { int reduce_id = _grammar.getRuleIndex(lr0_situation); @@ -71,7 +72,9 @@ class LR0Table { lr0_table[index_I]![X]!.add(Action.shift(index_J)); } else if (_grammar.nonTerminals.contains(X)) { if (X != _grammar.startNonTerminal + '0') { - lr0_table[index_I]![X]!.add(Action.goto(index_J)); + if (index_I != -1) { + lr0_table[index_I]![X]!.add(Action.goto(index_J)); + } } } } diff --git a/lab5/src/state_machine/FSM.dart b/lab5/src/state_machine/FSM.dart index 08ec38a..34edf85 100644 --- a/lab5/src/state_machine/FSM.dart +++ b/lab5/src/state_machine/FSM.dart @@ -21,181 +21,13 @@ class FSM { FSM.fromData( this.states, this.startStates, this.finalStates, this.transactions); - FSM determinize() { - Set> dStates = {}; // Множество состояний для ДКА - Map, Map>> dTransitions = - {}; // Таблица переходов для ДКА - Set> dFinalStates = {}; // Множество конечных состояний для ДКА - Set> dStartStates = {}; // Множество начальных состояний для ДКА - - //Строим замыкание по стартовым состояниям - Set startStateSet = eClosure(startStates); - dStates.add(startStateSet); - //Помещаем в очередь множество, состоящее из стартовой вершины - Queue> unprocessedStates = Queue()..add(startStateSet); - - while (unprocessedStates.isNotEmpty || unprocessedStates.length != 0) { - //Достаем множество из очереди - Set currentStateSet = unprocessedStates.removeFirst(); - // Посмотрим в какое состояние ведет переход по символу из каждого состояния - Map> transitions = {}; - - for (String symbol in alphabet) { - //Строим замыкание по состояниям, в которые можем перейти по символу - - // Set newStateSet = eClosure(move(currentStateSet, symbol)); - Set newStateSet = eClosure(move(currentStateSet, symbol)); - bool equal_flag = true; - - if (newStateSet.length == currentStateSet.length) { - for (int i = 0; i < newStateSet.length; i++) { - if (newStateSet.toList()[i].name != - currentStateSet.toList()[i].name) { - equal_flag = false; - } - } - } - - if (newStateSet.isNotEmpty && newStateSet.length != 0) { - transitions[symbol] = newStateSet; - - //Кладем в очередь только, если оно не лежало уже там раньше - if (unprocessedStates.contains(newStateSet) == false) { - // Если в множестве newStateSet хотя бы одно из вершин терминально в НКА, то само терминально - if (equal_flag == false) { - dStates.add(newStateSet); - - unprocessedStates.add(newStateSet); - } - } - } - } - - dTransitions[currentStateSet] = transitions; - - //Проверка, содержит ли текущий набор состояний какое-либо конечное состояние - setPrint(finalStates); - for (State t in finalStates) { - dFinalStates.add({t}); - } - - //Проверка, содержит ли текущий набор состояний какое-либо стартовое состояние - for (State t in startStates) { - if (currentStateSet.contains(t) && - (!dStartStates.contains(currentStateSet))) { - dStartStates.add(currentStateSet); - } - } - } - - // Создание нового ДКА - FSM determinizedFSM = FSM(); - -// Map для хранения объединенных состояний - - for (Set stateSet in dStates) { - State combinedState = State(); - for (State state in stateSet) { - combinedState.name += "${state.name} "; - combinedState.value = []; - if (state.value != null) { - (combinedState.value as List).add(state.value); - } - //value объединяем здесь - } - - determinizedFSM.states.add(combinedState); - - if (dStartStates.contains(stateSet)) { - determinizedFSM.startStates.add(combinedState); - } - - if (dFinalStates.contains(stateSet)) { - determinizedFSM.finalStates.add(combinedState); - } - - for (String symbol in alphabet) { - if (dTransitions[stateSet] != null && - dTransitions[stateSet]![symbol] != null) { - State toState = State(); - - for (State s in dTransitions[stateSet]![symbol]!) { - toState.name += "${s.name} "; - //тут же собираем value - } - // print('BY $symbol'); - determinizedFSM.transactions.add( - Transaction.ivan( - combinedState, - toState, - symbol, - ), - ); - } - } - } - - return determinizedFSM; - } - - // Вычисление эпсилон-замыкания для набора состояний - Set eClosure(Set states) { - Set closure = {}; - Queue queue = Queue.from(states); - - while (queue.isNotEmpty) { - State currentState = queue.removeFirst(); - closure.add(currentState); - - for (Transaction transaction in transactions) { - if (transaction.from == currentState && transaction.letter == 'ε') { - State toState = transaction.to; - if (!closure.contains(toState)) { - queue.add(toState); - } - } - } - } - - return closure; - } - - // Вычисление перехода для набора состояний по символу - Set move(Set states, String symbol) { - Set result = {}; - - for (State currentState in states) { - for (Transaction transaction in transactions) { - if (transaction.from == currentState && transaction.letter == symbol) { - result.add(transaction.to); - } - } - } - - return result; - } - - void setPrint(Set? set) { - String res = "Set print is working: "; - - if (set != null) { - for (State state in set) { - res += "${state.name}\n"; - } - - print(res); - } else { - res += "set is null"; - } - } - // метод реализующий получение состояния автомата по маске его имени State getState(String name) { return states.toList().where((element) => element.name == name).first; } int getStateIndex(State state) { - return states.toList().indexOf(state); + return states.toList().indexOf(state) -1; } State getStateByIndex(int index) { @@ -241,12 +73,12 @@ class State { String name = ''; // здесь хранится смысловая часть состояния автомата // в случае 5ЛР - это LR0 ситуация (см. класс LR0Situation) - dynamic value; + List value=[]; Map> moved = {}; State(); State.valued(this.name, this.value); - bool _compareLists(List list1, List list2) { + bool _compareLists( List list1, List list2) { if (list1.length != list2.length) { return false; } @@ -265,7 +97,7 @@ class State { identical(this, other) || other is State && _compareLists( - value as List, other.value as List); + value, other.value); @override int get hashCode => name.hashCode; diff --git a/lab5/src/utils/grammar.dart b/lab5/src/utils/grammar.dart index 9b6f649..4b9975f 100644 --- a/lab5/src/utils/grammar.dart +++ b/lab5/src/utils/grammar.dart @@ -45,8 +45,9 @@ class Grammar { } } this.rules = [...prd]; - to_cnf(); - // complete(); + // to_cnf(); + complete(); + // update_grammar(); } void _readGrammarFromFile(String filePath) { diff --git a/lab5/values/grammar_1/fsm.txt b/lab5/values/grammar_1/fsm.txt deleted file mode 100644 index 68e21c0..0000000 --- a/lab5/values/grammar_1/fsm.txt +++ /dev/null @@ -1,214 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" [label = "0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC", shape = circle] -"1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b" [label = "1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b", shape = doublecircle] -"2 [C -> b·]" [label = "2 [C -> b·]", shape = doublecircle] -"3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" [label = "3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS", shape = circle] -"4 [S -> SB·]" [label = "4 [S -> SB·]", shape = doublecircle] -"5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" [label = "5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC", shape = circle] -"6 [S -> CA·]" [label = "6 [S -> CA·]", shape = doublecircle] -"7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" [label = "7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC", shape = doublecircle] -"8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" [label = "8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS", shape = doublecircle] -"9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" [label = "9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b", shape = doublecircle] -"8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" [label = "8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS", shape = doublecircle] -"9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" [label = "9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b", shape = doublecircle] -dummy -> "0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -"0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b" [label = "S"] -"0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "2 [C -> b·]" [label = "b"] -"0 S0 -> ·S -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" [label = "C"] -"1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "4 [S -> SB·]" [label = "B"] -"1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" [label = "C"] -"1 [S0 -> S·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "2 [C -> b·]" [label = "b"] -"3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" -> "6 [S -> CA·]" [label = "A"] -"3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" -> "7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" [label = "C"] -"3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" -> "2 [C -> b·]" [label = "b"] -"5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" -> "8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" [label = "S"] -"5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" -> "3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" [label = "C"] -"5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" -> "2 [C -> b·]" [label = "b"] -"7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" [label = "S"] -"7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "2 [C -> b·]" [label = "b"] -"7 [S -> CC·] -[A -> C·S] -C -> ·b -S -> ·CA -S -> ·SB -S -> ·CC" -> "3 [S -> C·A] -[S -> C·C] -C -> ·b -A -> ·CS" [label = "C"] -"8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" -> "4 [S -> SB·]" [label = "B"] -"8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" -> "2 [C -> b·]" [label = "b"] -"8 [B -> CS·] -[S -> S·B] -C -> ·b -B -> ·CS" -> "5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" [label = "C"] -"9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "4 [S -> SB·]" [label = "B"] -"9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "5 [B -> C·S] -S -> ·CA -C -> ·b -S -> ·SB -S -> ·CC" [label = "C"] -"9 [A -> CS·] -[S -> S·B] -B -> ·CS -C -> ·b" -> "2 [C -> b·]" [label = "b"] -} diff --git a/lab5/values/grammar_1/table.txt b/lab5/values/grammar_1/table.txt deleted file mode 100644 index c3a8577..0000000 --- a/lab5/values/grammar_1/table.txt +++ /dev/null @@ -1,11 +0,0 @@ -State S A B C b $ -0 [1] [] [] [3] [s(2)] [] -1 [] [] [4] [5] [s(2)] [ACC] -2 [] [] [] [] [r(6)] [r(6)] -3 [] [6] [] [7] [s(2)] [] -4 [] [] [] [] [r(2)] [r(2)] -5 [8] [] [] [3] [s(2)] [] -6 [] [] [] [] [r(1)] [r(1)] -7 [9] [] [] [3] [r(3) s(2)] [r(3)] -8 [] [] [4] [5] [r(5) s(2)] [r(5)] -9 [] [] [4] [5] [r(4) s(2)] [r(4)] diff --git a/lab5/values/grammar_2/fsm.txt b/lab5/values/grammar_2/fsm.txt deleted file mode 100644 index b0ee7b3..0000000 --- a/lab5/values/grammar_2/fsm.txt +++ /dev/null @@ -1,30 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -S -> · -S -> ·a -S -> ·b" [label = "0 S0 -> ·S -S -> · -S -> ·a -S -> ·b", shape = doublecircle] -"1 [S0 -> S·]" [label = "1 [S0 -> S·]", shape = doublecircle] -"2 [S -> a·]" [label = "2 [S -> a·]", shape = doublecircle] -"3 [S -> b·]" [label = "3 [S -> b·]", shape = doublecircle] -dummy -> "0 S0 -> ·S -S -> · -S -> ·a -S -> ·b" -"0 S0 -> ·S -S -> · -S -> ·a -S -> ·b" -> "1 [S0 -> S·]" [label = "S"] -"0 S0 -> ·S -S -> · -S -> ·a -S -> ·b" -> "2 [S -> a·]" [label = "a"] -"0 S0 -> ·S -S -> · -S -> ·a -S -> ·b" -> "3 [S -> b·]" [label = "b"] -} diff --git a/lab5/values/grammar_2/table.txt b/lab5/values/grammar_2/table.txt deleted file mode 100644 index 4e014df..0000000 --- a/lab5/values/grammar_2/table.txt +++ /dev/null @@ -1,5 +0,0 @@ -State S a b $ -0 [1] [s(2)] [s(3)] [] -1 [] [] [] [ACC] -2 [] [r(2)] [r(2)] [r(2)] -3 [] [r(3)] [r(3)] [r(3)] diff --git a/lab5/values/grammar_3/fsm.txt b/lab5/values/grammar_3/fsm.txt deleted file mode 100644 index 1e54a3a..0000000 --- a/lab5/values/grammar_3/fsm.txt +++ /dev/null @@ -1,223 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b" [label = "0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b", shape = circle] -"1 [S0 -> S·]" [label = "1 [S0 -> S·]", shape = doublecircle] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" [label = "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]", shape = doublecircle] -"3 [S -> b·]" [label = "3 [S -> b·]", shape = doublecircle] -"4 [S -> aS·b] -[S -> aS·b&aSb]" [label = "4 [S -> aS·b] -[S -> aS·b&aSb]", shape = circle] -"5 [S -> a|·b]" [label = "5 [S -> a|·b]", shape = circle] -"6 [S -> aSb·] -[S -> aSb·&aSb]" [label = "6 [S -> aSb·] -[S -> aSb·&aSb]", shape = doublecircle] -"7 [S -> a|b·]" [label = "7 [S -> a|b·]", shape = doublecircle] -"8 [S -> aSb&·aSb]" [label = "8 [S -> aSb&·aSb]", shape = circle] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a" [label = "9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a", shape = circle] -"10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" [label = "10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]", shape = circle] -"11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" [label = "11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]", shape = doublecircle] -"12 [S -> aSb&aSb·] -[S -> aSb·]" [label = "12 [S -> aSb&aSb·] -[S -> aSb·]", shape = doublecircle] -dummy -> "0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b" -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b" -> "1 [S0 -> S·]" [label = "S"] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" [label = "a"] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -S -> ·b" -> "3 [S -> b·]" [label = "b"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" -> "4 [S -> aS·b] -[S -> aS·b&aSb]" [label = "S"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" [label = "a"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" -> "3 [S -> b·]" [label = "b"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" -> "5 [S -> a|·b]" [label = "|"] -"4 [S -> aS·b] -[S -> aS·b&aSb]" -> "6 [S -> aSb·] -[S -> aSb·&aSb]" [label = "b"] -"5 [S -> a|·b]" -> "7 [S -> a|b·]" [label = "b"] -"6 [S -> aSb·] -[S -> aSb·&aSb]" -> "8 [S -> aSb&·aSb]" [label = "&"] -"8 [S -> aSb&·aSb]" -> "9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a" [label = "a"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a" -> "10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" [label = "S"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a" -> "11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" [label = "b"] -"10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" -> "12 [S -> aSb&aSb·] -[S -> aSb·]" [label = "b"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·a -[S -> a·|b] -[S -> a·Sb&aSb] -[S -> a·]" [label = "a"] -"11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" -> "8 [S -> aSb&·aSb]" [label = "&"] -} diff --git a/lab5/values/grammar_3/table.txt b/lab5/values/grammar_3/table.txt deleted file mode 100644 index 3994e38..0000000 --- a/lab5/values/grammar_3/table.txt +++ /dev/null @@ -1,14 +0,0 @@ -State S a b | & $ -0 [1] [s(2)] [s(3)] [] [] [] -1 [] [] [] [] [] [ACC] -2 [4] [r(5) s(2)] [r(5) s(3)] [r(5) s(5)] [r(5)] [r(5)] -3 [] [r(3)] [r(3)] [r(3)] [r(3)] [r(3)] -4 [] [] [s(6)] [] [] [] -5 [] [] [s(7)] [] [] [] -6 [] [r(1)] [r(1)] [r(1)] [r(1) s(8)] [r(1)] -7 [] [r(2)] [r(2)] [r(2)] [r(2)] [r(2)] -8 [] [s(9)] [] [] [] [] -9 [10] [s(2)] [s(11)] [] [] [] -10 [] [] [s(12)] [] [] [] -11 [] [r(1) r(3)] [r(1) r(3)] [r(1) r(3)] [r(1) r(3) s(8)] [r(1) r(3)] -12 [] [r(4) r(1)] [r(4) r(1)] [r(4) r(1)] [r(4) r(1)] [r(4) r(1)] diff --git a/lab5/values/grammar_4/fsm.txt b/lab5/values/grammar_4/fsm.txt deleted file mode 100644 index be9ba08..0000000 --- a/lab5/values/grammar_4/fsm.txt +++ /dev/null @@ -1,199 +0,0 @@ -digraph { -rankdir = LR -dummy [shape=none, label="", width=0, height=0] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b" [label = "0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b", shape = circle] -"1 [S0 -> S·]" [label = "1 [S0 -> S·]", shape = doublecircle] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" [label = "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]", shape = circle] -"3 [S -> b·]" [label = "3 [S -> b·]", shape = doublecircle] -"4 [S -> aS·b] -[S -> aS·b&aSb]" [label = "4 [S -> aS·b] -[S -> aS·b&aSb]", shape = circle] -"5 [S -> a|·b]" [label = "5 [S -> a|·b]", shape = circle] -"6 [S -> aSb·] -[S -> aSb·&aSb]" [label = "6 [S -> aSb·] -[S -> aSb·&aSb]", shape = doublecircle] -"7 [S -> a|b·]" [label = "7 [S -> a|b·]", shape = doublecircle] -"8 [S -> aSb&·aSb]" [label = "8 [S -> aSb&·aSb]", shape = circle] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb" [label = "9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb", shape = circle] -"10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" [label = "10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]", shape = circle] -"11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" [label = "11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]", shape = doublecircle] -"12 [S -> aSb&aSb·] -[S -> aSb·]" [label = "12 [S -> aSb&aSb·] -[S -> aSb·]", shape = doublecircle] -dummy -> "0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b" -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b" -> "1 [S0 -> S·]" [label = "S"] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" [label = "a"] -"0 S0 -> ·S -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -S -> ·b -S -> ·b" -> "3 [S -> b·]" [label = "b"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" -> "4 [S -> aS·b] -[S -> aS·b&aSb]" [label = "S"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" [label = "a"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" -> "3 [S -> b·]" [label = "b"] -"2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" -> "5 [S -> a|·b]" [label = "|"] -"4 [S -> aS·b] -[S -> aS·b&aSb]" -> "6 [S -> aSb·] -[S -> aSb·&aSb]" [label = "b"] -"5 [S -> a|·b]" -> "7 [S -> a|b·]" [label = "b"] -"6 [S -> aSb·] -[S -> aSb·&aSb]" -> "8 [S -> aSb&·aSb]" [label = "&"] -"8 [S -> aSb&·aSb]" -> "9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb" [label = "a"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb" -> "10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" [label = "S"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb" -> "11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" [label = "b"] -"10 [S -> aSb&aS·b] -[S -> aS·b] -[S -> aS·b&aSb]" -> "12 [S -> aSb&aSb·] -[S -> aSb·]" [label = "b"] -"9 [S -> aSb&a·Sb] -S -> aS·b -S -> aS·b&aSb -S -> a·Sb -S -> a·Sb&aSb -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb" -> "2 [S -> a·Sb] -S -> ·aSb -S -> ·a|b -S -> ·b -S -> ·aSb&aSb -[S -> a·|b] -[S -> a·Sb&aSb]" [label = "a"] -"11 [S -> aSb·] -[S -> aSb·&aSb] -[S -> b·]" -> "8 [S -> aSb&·aSb]" [label = "&"] -} diff --git a/lab5/values/grammar_4/table.txt b/lab5/values/grammar_4/table.txt deleted file mode 100644 index fbb9d33..0000000 --- a/lab5/values/grammar_4/table.txt +++ /dev/null @@ -1,14 +0,0 @@ -State S a b | & $ -0 [1] [s(2)] [s(3)] [] [] [] -1 [] [] [] [] [] [ACC] -2 [4] [s(2)] [s(3)] [s(5)] [] [] -3 [] [r(3)] [r(3)] [r(3)] [r(3)] [r(3)] -4 [] [] [s(6)] [] [] [] -5 [] [] [s(7)] [] [] [] -6 [] [r(1)] [r(1)] [r(1)] [r(1) s(8)] [r(1)] -7 [] [r(2)] [r(2)] [r(2)] [r(2)] [r(2)] -8 [] [s(9)] [] [] [] [] -9 [10] [s(2)] [s(11)] [] [] [] -10 [] [] [s(12)] [] [] [] -11 [] [r(1) r(3) r(1) r(3)] [r(1) r(3) r(1) r(3)] [r(1) r(3) r(1) r(3)] [r(1) r(3) r(1) r(3) s(8)] [r(1) r(3) r(1) r(3)] -12 [] [r(4) r(1) r(4) r(1)] [r(4) r(1) r(4) r(1)] [r(4) r(1) r(4) r(1)] [r(4) r(1) r(4) r(1)] [r(4) r(1) r(4) r(1)]