From 10db80521b5abed37ea75d2f08e88630e8514405 Mon Sep 17 00:00:00 2001 From: Encapsulateed <69109441+Encapsulateed@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:42:45 +0300 Subject: [PATCH] add lookahead symbol --- lab5/main.dart | 2 +- lab5/result.txt | 41 ------------------------------------- lab5/src/lr0/lr0Parser.dart | 14 ++++++------- 3 files changed, 8 insertions(+), 49 deletions(-) delete mode 100644 lab5/result.txt diff --git a/lab5/main.dart b/lab5/main.dart index d7d7b26..93e68cb 100644 --- a/lab5/main.dart +++ b/lab5/main.dart @@ -27,8 +27,8 @@ void main(List arguments) { step_num = int.parse(match_step.group(1)!); } } + var cg = conjunctiveGrammar.fromFile('input.txt'); - print(word); List results = []; for (var grammar in cg.possible_grammars) { diff --git a/lab5/result.txt b/lab5/result.txt deleted file mode 100644 index f0c4122..0000000 --- a/lab5/result.txt +++ /dev/null @@ -1,41 +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]"]; - } - subgraph cluster_2 { - label="Level 2"; - "[2, 4]" [label="[2, 4]"]; - "[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, 6]" [label="[4, 6]"]; - "[4, 1]" [label="[4, 1]"]; - } - subgraph cluster_5 { - label="Level 5"; - "[ACC, ACC]" [label="[ACC, ACC]"]; - } - "[ACC, ACC]" -> "[4, 1]"; - "[4, 2]" -> "[3, 3]"; - "[4, 6]" -> "[2, 4]"; - "[4, 1]" -> "[0, 0]"; - "[3, 2]" -> "[2, 4]"; - "[3, 3]" -> "[2, 1]"; - "[2, 4]" -> "[1, 2]"; - "[2, 1]" -> "[0, 0]"; - "[1, 2]" -> "[0, 0]"; -} diff --git a/lab5/src/lr0/lr0Parser.dart b/lab5/src/lr0/lr0Parser.dart index f773a5a..df4a98f 100644 --- a/lab5/src/lr0/lr0Parser.dart +++ b/lab5/src/lr0/lr0Parser.dart @@ -21,9 +21,9 @@ class LR0Parser { _table = LR0Table(_grammar); } - void Shift(GSSNode> v, int state_id) { - nodes[node_id_next()] = stack - .push([(int.parse(v.value[0]) + 1).toString(), state_id.toString()], v); + void Shift(GSSNode> v, int state_id, String x) { + nodes[node_id_next()] = stack.push( + [(int.parse(v.value[0]) + 1).toString(), state_id.toString(), x], v); } void Reduce(GSSNode> v, int rule_id, String x, @@ -39,7 +39,7 @@ class LR0Parser { var i = int.parse(v.value[0]); var v_ss_value = [i.toString(), s_ss.toString()]; // Индексация верная var v_ss = stack.levels[i - 1].find(v_ss_value); // Индексация верная - + v_ss_value.add(x); if (v_ss != null) { if (v_ss.prev.values.contains(v1_s)) { continue; @@ -87,7 +87,7 @@ class LR0Parser { bool parse(List word_tokens, int n) { word_tokens.add("\$"); - nodes[node_id_curr()] = stack.push(["0", "0"]); + nodes[node_id_curr()] = stack.push(["0", "0", word_tokens[0]]); int i = 1; var endcheck = 0; while (i < word_tokens.length + 1) { @@ -114,7 +114,7 @@ class LR0Parser { for (var obj in act!) { if (obj.actionTitle.startsWith("s")) { - Shift(v, obj.stateNumber!); + Shift(v, obj.stateNumber!, word_tokens[i]); check = true; continue; } @@ -147,7 +147,7 @@ class LR0Parser { for (var obj in act!) { if (obj.actionTitle.startsWith("s")) { - Shift(hidenode, obj.stateNumber!); + Shift(hidenode, obj.stateNumber!, word_tokens[i]); check = true; continue; }