diff --git a/Canon.Core/Abstractions/ITransformer.cs b/Canon.Core/Abstractions/ITransformer.cs
index aad519c..b77d9a3 100644
--- a/Canon.Core/Abstractions/ITransformer.cs
+++ b/Canon.Core/Abstractions/ITransformer.cs
@@ -7,13 +7,20 @@ namespace Canon.Core.Abstractions;
///
/// 归约的长度
/// 归约得到的左部符号
-public record ReduceInformation(int Length, NonTerminator Left);
-
+public record ReduceInformation(int Length, NonTerminator Left)
+{
+ public string GenerateCode()
+ {
+ return $"new ReduceInformation({Length}, {Left.GenerateCode()})";
+ }
+}
///
/// 状态的各种迁移信息
///
public interface ITransformer
{
+ public string Name { get; }
+
///
/// 进行移进的信息
///
diff --git a/Canon.Core/GrammarParser/Grammar.cs b/Canon.Core/GrammarParser/Grammar.cs
index 166f513..cc353d9 100644
--- a/Canon.Core/GrammarParser/Grammar.cs
+++ b/Canon.Core/GrammarParser/Grammar.cs
@@ -79,6 +79,8 @@ public class Grammar
private class Transformer : ITransformer
{
+ public string Name => string.Empty;
+
public IDictionary ShiftTable { get; }
= new Dictionary();
diff --git a/Canon.Core/GrammarParser/Terminator.cs b/Canon.Core/GrammarParser/Terminator.cs
index 4b7e996..1f0589a 100644
--- a/Canon.Core/GrammarParser/Terminator.cs
+++ b/Canon.Core/GrammarParser/Terminator.cs
@@ -6,6 +6,13 @@ namespace Canon.Core.GrammarParser;
public abstract class TerminatorBase
{
public abstract bool IsTerminated { get; }
+
+ ///
+ /// 生成能产生该符号的C#代码
+ /// 用于预生成分析表
+ ///
+ /// 产生该符号的C#代码
+ public abstract string GenerateCode();
}
///
@@ -45,6 +52,29 @@ public class Terminator : TerminatorBase, IEquatable
_terminatorType = type;
}
+ public override string GenerateCode()
+ {
+ switch (_terminatorType)
+ {
+ case SemanticTokenType.Keyword:
+ return $"new Terminator(KeywordType.{_keywordType})";
+ case SemanticTokenType.Delimiter:
+ return $"new Terminator(DelimiterType.{_delimiterType})";
+ case SemanticTokenType.Operator:
+ return $"new Terminator(OperatorType.{_operatorType})";
+ case SemanticTokenType.Identifier:
+ return "Terminator.IdentifierTerminator";
+ case SemanticTokenType.Character:
+ return "Terminator.CharacterTerminator";
+ case SemanticTokenType.Number:
+ return "Terminator.NumberTerminator";
+ case SemanticTokenType.End:
+ return "Terminator.EndTerminator";
+ }
+
+ throw new InvalidOperationException();
+ }
+
///
/// 标识符终结符单例
/// 鉴于在语法中不关心标识符具体内容,因此可以使用单例对象
@@ -205,6 +235,11 @@ public class NonTerminator(NonTerminatorType type) : TerminatorBase, IEquatable<
return Type.GetHashCode();
}
+ public override string GenerateCode()
+ {
+ return $"new NonTerminator(NonTerminatorType.{Type})";
+ }
+
public override string ToString() => Type.ToString();
public bool Equals(NonTerminator? other)
diff --git a/Canon.Generator/Canon.Generator.csproj b/Canon.Generator/Canon.Generator.csproj
new file mode 100644
index 0000000..ff4ccc5
--- /dev/null
+++ b/Canon.Generator/Canon.Generator.csproj
@@ -0,0 +1,18 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Canon.Generator/Extensions/RootCommandExtension.cs b/Canon.Generator/Extensions/RootCommandExtension.cs
new file mode 100644
index 0000000..3538261
--- /dev/null
+++ b/Canon.Generator/Extensions/RootCommandExtension.cs
@@ -0,0 +1,40 @@
+using System.CommandLine;
+using Canon.Generator.GrammarGenerator;
+
+namespace Canon.Generator.Extensions;
+
+public static class RootCommandExtension
+{
+ public static void AddGenerateCommand(this RootCommand rootCommand)
+ {
+ Command generateCommand = new("generate", "Generate source files.");
+
+ Argument filenameArgument = new(name: "filename",
+ description: "determines the generated file name.",
+ getDefaultValue: () => "Canon.g.cs");
+ generateCommand.AddArgument(filenameArgument);
+
+ Option namespaceOption = new(name: "--namespace",
+ description: "determines the namespace of generated code.",
+ getDefaultValue: () => "Canon.Generator.GrammarGenerator");
+ generateCommand.AddOption(namespaceOption);
+
+ generateCommand.SetHandler(async (context) =>
+ {
+ string filename = context.ParseResult.GetValueForArgument(filenameArgument);
+ FileInfo generatedFile = new(Path.Combine(Environment.CurrentDirectory, filename));
+ if (generatedFile.Exists)
+ {
+ generatedFile.Delete();
+ }
+
+ await using FileStream stream = generatedFile.OpenWrite();
+ GenerateCommand command = new();
+
+ string namespaceValue = context.ParseResult.GetValueForOption(namespaceOption) ?? "Canon.Generator.GrammarGenerator";
+ await command.GenerateCode(stream, namespaceValue);
+ });
+
+ rootCommand.AddCommand(generateCommand);
+ }
+}
diff --git a/Canon.Generator/GrammarGenerator/GenerateCommand.cs b/Canon.Generator/GrammarGenerator/GenerateCommand.cs
new file mode 100644
index 0000000..be754f6
--- /dev/null
+++ b/Canon.Generator/GrammarGenerator/GenerateCommand.cs
@@ -0,0 +1,29 @@
+using System.Text;
+using Canon.Core.Abstractions;
+using Canon.Core.Enums;
+using Canon.Core.GrammarParser;
+
+namespace Canon.Generator.GrammarGenerator;
+
+public class GenerateCommand
+{
+ private readonly GrammarBuilder _builder = new()
+ {
+ Generators = PascalGrammar.Grammar, Begin = new NonTerminator(NonTerminatorType.StartNonTerminator)
+ };
+
+ private readonly GeneratedGrammarParser _parser;
+
+ public GenerateCommand()
+ {
+ Grammar grammar = _builder.Build();
+ _parser = grammar.ToGeneratedGrammarParser();
+ }
+
+ public async Task GenerateCode(Stream output, string namespaceValue)
+ {
+ string code = _parser.GenerateCode(namespaceValue);
+ byte[] bytes = Encoding.UTF8.GetBytes(code);
+ await output.WriteAsync(bytes);
+ }
+}
diff --git a/Canon.Generator/GrammarGenerator/GeneratedGrammarParser.cs b/Canon.Generator/GrammarGenerator/GeneratedGrammarParser.cs
new file mode 100644
index 0000000..a52ee1b
--- /dev/null
+++ b/Canon.Generator/GrammarGenerator/GeneratedGrammarParser.cs
@@ -0,0 +1,116 @@
+using System.Text;
+using Canon.Core.Abstractions;
+using Canon.Core.GrammarParser;
+
+namespace Canon.Generator.GrammarGenerator;
+
+public class GeneratedGrammarParser(
+ Dictionary transformers,
+ string beginState,
+ NonTerminator begin) : GrammarParserBase
+{
+ public override ITransformer BeginTransformer => transformers[beginState];
+
+ public override NonTerminator Begin => begin;
+
+ public string GenerateCode(string namespaceValue)
+ {
+ StringBuilder builder = new();
+ builder.Append("#nullable enable\n");
+ builder.Append("using Canon.Core.Abstractions;\n");
+ builder.Append("using Canon.Core.GrammarParser;\n");
+ builder.Append("using Canon.Core.Enums;\n");
+ builder.Append($"namespace {namespaceValue};\n");
+
+ builder.Append('\n');
+ builder.Append("""
+ public class GeneratedTransformer : ITransformer
+ {
+ private IDictionary _shiftPointers;
+
+ public string Name { get; }
+
+ public IDictionary ReduceTable { get; }
+
+ public IDictionary ShiftTable { get; }
+
+ public GeneratedTransformer(Dictionary shiftTable,
+ Dictionary reduceTable, string name)
+ {
+ ReduceTable = reduceTable;
+ ShiftTable = new Dictionary();
+ _shiftPointers = shiftTable;
+ Name = name;
+ }
+
+ public GeneratedTransformer()
+ {
+ ReduceTable = new Dictionary();
+ ShiftTable = new Dictionary();
+ _shiftPointers = new Dictionary();
+ Name = Guid.NewGuid().ToString();
+ }
+
+ public void ConstructShiftTable(Dictionary transformers)
+ {
+ foreach (KeyValuePair pair in _shiftPointers)
+ {
+ ShiftTable.Add(pair.Key, transformers[pair.Value]);
+ }
+ }
+
+ public override bool Equals(object? obj)
+ {
+ if (obj is not GeneratedTransformer other)
+ {
+ return false;
+ }
+
+ return Name == other.Name;
+ }
+
+ public override int GetHashCode() => Name.GetHashCode();
+ }
+ """);
+ builder.Append('\n');
+
+ builder.Append("public class GeneratedGrammarParser : GrammarParserBase\n")
+ .Append("{\n");
+
+ builder.Append("\tprivate static readonly Dictionary s_transformers = new()\n")
+ .Append("\t{\n");
+
+ foreach (KeyValuePair pair in transformers)
+ {
+ builder.Append($"\t\t{{ \"{pair.Key}\", {pair.Value.GenerateCode()} }},\n");
+ }
+
+ builder.Append("\t};\n");
+ builder.Append("\n");
+
+ builder.Append("""
+ private GeneratedGrammarParser()
+ {
+ foreach(GeneratedTransformer transformer in s_transformers.Values)
+ {
+ transformer.ConstructShiftTable(s_transformers);
+ }
+ }
+
+ private static GeneratedGrammarParser s_instance = new GeneratedGrammarParser();
+
+ public static GeneratedGrammarParser Instance => s_instance;
+
+ """);
+ builder.Append("\n");
+
+ builder.Append('\t').Append("public override ITransformer BeginTransformer => ")
+ .Append($"s_transformers[\"{beginState}\"];\n");
+
+ builder.Append('\t').Append("public override NonTerminator Begin => ")
+ .Append(begin.GenerateCode()).Append(";\n");
+
+ builder.Append("}\n");
+ return builder.ToString();
+ }
+}
diff --git a/Canon.Generator/GrammarGenerator/GeneratedTransformer.cs b/Canon.Generator/GrammarGenerator/GeneratedTransformer.cs
new file mode 100644
index 0000000..938c870
--- /dev/null
+++ b/Canon.Generator/GrammarGenerator/GeneratedTransformer.cs
@@ -0,0 +1,77 @@
+using System.Text;
+using Canon.Core.Abstractions;
+using Canon.Core.GrammarParser;
+
+namespace Canon.Generator.GrammarGenerator;
+
+public class GeneratedTransformer : ITransformer
+{
+ private readonly IDictionary _shiftPointers;
+
+ public string Name { get; }
+
+ public IDictionary ReduceTable { get; }
+
+ public IDictionary ShiftTable { get; }
+
+ public GeneratedTransformer(Dictionary shiftTable,
+ Dictionary reduceTable, string name)
+ {
+ ReduceTable = reduceTable;
+ ShiftTable = new Dictionary();
+ _shiftPointers = shiftTable;
+ Name = name;
+ }
+
+ public GeneratedTransformer()
+ {
+ ReduceTable = new Dictionary();
+ ShiftTable = new Dictionary();
+ _shiftPointers = new Dictionary();
+ Name = Guid.NewGuid().ToString();
+ }
+
+ public void ConstructShiftTable(Dictionary transformers)
+ {
+ foreach (KeyValuePair pair in _shiftPointers)
+ {
+ ShiftTable.Add(pair.Key, transformers[pair.Value]);
+ }
+ }
+
+ public override bool Equals(object? obj)
+ {
+ if (obj is not GeneratedTransformer other)
+ {
+ return false;
+ }
+
+ return Name == other.Name;
+ }
+
+ public override int GetHashCode() => Name.GetHashCode();
+
+ public string GenerateCode()
+ {
+ StringBuilder builder = new();
+
+ builder.Append("new GeneratedTransformer(new Dictionary").Append("{");
+ foreach (KeyValuePair pair in ShiftTable)
+ {
+ builder.Append($" {{ {pair.Key.GenerateCode()}, \"{pair.Value.Name}\"}},");
+ }
+
+ builder.Append("}, ");
+
+ builder.Append("new Dictionary{");
+
+ foreach (KeyValuePair pair in ReduceTable)
+ {
+ builder.Append($" {{ {pair.Key.GenerateCode()}, {pair.Value.GenerateCode()}}},");
+ }
+
+ builder.Append($" }}, \"{Name}\")");
+
+ return builder.ToString();
+ }
+}
diff --git a/Canon.Generator/GrammarGenerator/GrammarExtensions.cs b/Canon.Generator/GrammarGenerator/GrammarExtensions.cs
new file mode 100644
index 0000000..755c8be
--- /dev/null
+++ b/Canon.Generator/GrammarGenerator/GrammarExtensions.cs
@@ -0,0 +1,63 @@
+using Canon.Core.Abstractions;
+using Canon.Core.GrammarParser;
+
+namespace Canon.Generator.GrammarGenerator;
+
+public static class GrammarExtensions
+{
+ public static GeneratedGrammarParser ToGeneratedGrammarParser(this Grammar grammar)
+ {
+ // 建立的逻辑和原始逻辑一致
+ Dictionary transformers = [];
+
+ foreach (LrState state in grammar.Automation)
+ {
+ GeneratedTransformer transformer;
+ if (transformers.TryGetValue(state, out GeneratedTransformer? oldTransformer))
+ {
+ transformer = oldTransformer;
+ }
+ else
+ {
+ GeneratedTransformer generatedTransformer = new();
+ transformers.Add(state, generatedTransformer);
+ transformer = generatedTransformer;
+ }
+
+ foreach (Expression expression in state.Expressions)
+ {
+ if (expression.Pos == expression.Right.Count)
+ {
+ transformer.ReduceTable.TryAdd(expression.LookAhead, new ReduceInformation(
+ expression.Right.Count, expression.Left));
+ }
+ }
+
+ foreach (KeyValuePair pair in state.Transformer)
+ {
+ GeneratedTransformer targetTransformer;
+ if (transformers.TryGetValue(pair.Value, out GeneratedTransformer? oldTargetTransformer))
+ {
+ targetTransformer = oldTargetTransformer;
+ }
+ else
+ {
+ GeneratedTransformer newTransformer = new();
+ transformers.Add(pair.Value, newTransformer);
+ targetTransformer = newTransformer;
+ }
+
+ transformer.ShiftTable.TryAdd(pair.Key, targetTransformer);
+ }
+ }
+
+ Dictionary generatedTransformers = [];
+
+ foreach (GeneratedTransformer transformer in transformers.Values)
+ {
+ generatedTransformers.Add(transformer.Name, transformer);
+ }
+
+ return new GeneratedGrammarParser(generatedTransformers, transformers[grammar.BeginState].Name, grammar.Begin);
+ }
+}
diff --git a/Canon.Generator/Program.cs b/Canon.Generator/Program.cs
new file mode 100644
index 0000000..3e1c7b1
--- /dev/null
+++ b/Canon.Generator/Program.cs
@@ -0,0 +1,8 @@
+using System.CommandLine;
+using Canon.Generator.Extensions;
+
+RootCommand rootCommand = new("Canon Compiler Source Generator");
+
+rootCommand.AddGenerateCommand();
+
+await rootCommand.InvokeAsync(args);
diff --git a/Canon.Tests/GeneratedParserTests/GenerateParserTests.cs b/Canon.Tests/GeneratedParserTests/GenerateParserTests.cs
new file mode 100644
index 0000000..a1205a0
--- /dev/null
+++ b/Canon.Tests/GeneratedParserTests/GenerateParserTests.cs
@@ -0,0 +1,62 @@
+using Canon.Core.Abstractions;
+using Canon.Core.Enums;
+using Canon.Core.GrammarParser;
+
+namespace Canon.Tests.GeneratedParserTests;
+
+public class GenerateParserTests
+{
+ private readonly GrammarBuilder _builder = new()
+ {
+ Generators = PascalGrammar.Grammar, Begin = new NonTerminator(NonTerminatorType.StartNonTerminator)
+ };
+
+ private readonly GrammarParserBase _parser;
+
+ public GenerateParserTests()
+ {
+ Grammar grammar = _builder.Build();
+ _parser = grammar.ToGrammarParser();
+ }
+
+ [Fact]
+ public void ConsistencyTests()
+ {
+ GeneratedGrammarParser generatedGrammarParser = GeneratedGrammarParser.Instance;
+
+ ITransformer originTransformer = _parser.BeginTransformer;
+ ITransformer generatedTransformer = generatedGrammarParser.BeginTransformer;
+
+ Queue<(ITransformer, ITransformer)> transformerQueue = [];
+ transformerQueue.Enqueue((originTransformer, generatedTransformer));
+ HashSet visited = [];
+
+ while (transformerQueue.Count != 0)
+ {
+ (originTransformer, generatedTransformer) = transformerQueue.Dequeue();
+ if (visited.Contains(generatedTransformer.Name))
+ {
+ continue;
+ }
+
+ visited.Add(generatedTransformer.Name);
+
+ foreach (KeyValuePair pair in originTransformer.ShiftTable)
+ {
+ Assert.True(generatedTransformer.ShiftTable.TryGetValue(pair.Key, out ITransformer? nextTransformer));
+ Assert.NotNull(nextTransformer);
+
+ transformerQueue.Enqueue((pair.Value, nextTransformer));
+ }
+
+ foreach (KeyValuePair pair in originTransformer.ReduceTable)
+ {
+ Assert.True(generatedTransformer.ReduceTable.TryGetValue(pair.Key, out ReduceInformation? information));
+ Assert.NotNull(information);
+
+ Assert.Equal(pair.Value.Length, information.Length);
+ Assert.Equal(pair.Value.Left, information.Left);
+ }
+ }
+ }
+}
diff --git a/Canon.Tests/GeneratedParserTests/GeneratedParser.g.cs b/Canon.Tests/GeneratedParserTests/GeneratedParser.g.cs
new file mode 100644
index 0000000..dfab5a6
--- /dev/null
+++ b/Canon.Tests/GeneratedParserTests/GeneratedParser.g.cs
@@ -0,0 +1,658 @@
+#nullable enable
+using Canon.Core.Abstractions;
+using Canon.Core.GrammarParser;
+using Canon.Core.Enums;
+namespace Canon.Tests.GeneratedParserTests;
+
+public class GeneratedTransformer : ITransformer
+{
+ private IDictionary _shiftPointers;
+
+ public string Name { get; }
+
+ public IDictionary ReduceTable { get; }
+
+ public IDictionary ShiftTable { get; }
+
+ public GeneratedTransformer(Dictionary shiftTable,
+ Dictionary reduceTable, string name)
+ {
+ ReduceTable = reduceTable;
+ ShiftTable = new Dictionary();
+ _shiftPointers = shiftTable;
+ Name = name;
+ }
+
+ public GeneratedTransformer()
+ {
+ ReduceTable = new Dictionary();
+ ShiftTable = new Dictionary();
+ _shiftPointers = new Dictionary();
+ Name = Guid.NewGuid().ToString();
+ }
+
+ public void ConstructShiftTable(Dictionary transformers)
+ {
+ foreach (KeyValuePair pair in _shiftPointers)
+ {
+ ShiftTable.Add(pair.Key, transformers[pair.Value]);
+ }
+ }
+
+ public override bool Equals(object? obj)
+ {
+ if (obj is not GeneratedTransformer other)
+ {
+ return false;
+ }
+
+ return Name == other.Name;
+ }
+
+ public override int GetHashCode() => Name.GetHashCode();
+}
+public class GeneratedGrammarParser : GrammarParserBase
+{
+ private static readonly Dictionary s_transformers = new()
+ {
+ { "f73d22cc-ac40-46ec-8150-8772c03417b9", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ProgramStruct), "93f4cc5b-f5f9-47c5-9c27-d8232ed9b41c"}, { new NonTerminator(NonTerminatorType.ProgramHead), "a5fb6eee-4eb4-47a7-9076-d37cacd73137"}, { new Terminator(KeywordType.Program), "cd87f80a-1d67-4314-adf5-0286be4b84b4"},}, new Dictionary{ }, "f73d22cc-ac40-46ec-8150-8772c03417b9") },
+ { "93f4cc5b-f5f9-47c5-9c27-d8232ed9b41c", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { Terminator.EndTerminator, new ReduceInformation(1, new NonTerminator(NonTerminatorType.StartNonTerminator))}, }, "93f4cc5b-f5f9-47c5-9c27-d8232ed9b41c") },
+ { "a5fb6eee-4eb4-47a7-9076-d37cacd73137", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Semicolon), "9f931e39-3dda-4442-a0d2-00366e13bba7"},}, new Dictionary{ }, "a5fb6eee-4eb4-47a7-9076-d37cacd73137") },
+ { "cd87f80a-1d67-4314-adf5-0286be4b84b4", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "fd99600d-9ba3-4c30-a168-fbafa54fdd07"},}, new Dictionary{ }, "cd87f80a-1d67-4314-adf5-0286be4b84b4") },
+ { "9f931e39-3dda-4442-a0d2-00366e13bba7", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ProgramBody), "89ec3a30-25a0-4c91-b08f-e03ec90fe303"}, { new NonTerminator(NonTerminatorType.ConstDeclarations), "d3becd2a-f640-4519-a74e-dc46787e059f"}, { new Terminator(KeywordType.Const), "9bbeb6e3-e7ec-42e8-8d5f-76e8f0691a52"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(0, new NonTerminator(NonTerminatorType.ConstDeclarations))}, { new Terminator(KeywordType.Var), new ReduceInformation(0, new NonTerminator(NonTerminatorType.ConstDeclarations))}, }, "9f931e39-3dda-4442-a0d2-00366e13bba7") },
+ { "fd99600d-9ba3-4c30-a168-fbafa54fdd07", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.LeftParenthesis), "223dd952-d42c-4142-9bf3-0ffaf67cdfa0"},}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(2, new NonTerminator(NonTerminatorType.ProgramHead))}, }, "fd99600d-9ba3-4c30-a168-fbafa54fdd07") },
+ { "89ec3a30-25a0-4c91-b08f-e03ec90fe303", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Period), "e3d245f1-90bc-4886-95ad-abcaac21421e"},}, new Dictionary{ }, "89ec3a30-25a0-4c91-b08f-e03ec90fe303") },
+ { "d3becd2a-f640-4519-a74e-dc46787e059f", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.VarDeclarations), "4b4367f6-547c-48dd-9c79-dedf02be09aa"}, { new Terminator(KeywordType.Var), "fc46d9de-be4c-4926-9fb2-dbb70fd7fe64"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(0, new NonTerminator(NonTerminatorType.VarDeclarations))}, }, "d3becd2a-f640-4519-a74e-dc46787e059f") },
+ { "9bbeb6e3-e7ec-42e8-8d5f-76e8f0691a52", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ConstDeclaration), "acc8f59f-3ccf-41cc-b390-befe49a441fc"}, { Terminator.IdentifierTerminator, "129a8062-876b-46ff-b339-8044078a546e"},}, new Dictionary{ }, "9bbeb6e3-e7ec-42e8-8d5f-76e8f0691a52") },
+ { "223dd952-d42c-4142-9bf3-0ffaf67cdfa0", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.IdentifierList), "a187908e-87a9-4a20-8b40-58208c38efe7"}, { Terminator.IdentifierTerminator, "9ebc6625-fade-41b7-a22e-653259af07f4"},}, new Dictionary{ }, "223dd952-d42c-4142-9bf3-0ffaf67cdfa0") },
+ { "e3d245f1-90bc-4886-95ad-abcaac21421e", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { Terminator.EndTerminator, new ReduceInformation(4, new NonTerminator(NonTerminatorType.ProgramStruct))}, }, "e3d245f1-90bc-4886-95ad-abcaac21421e") },
+ { "4b4367f6-547c-48dd-9c79-dedf02be09aa", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.SubprogramDeclarations), "1ab4bd3d-2471-48fa-bc82-d5ab024b6f1d"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(0, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, { new Terminator(KeywordType.Procedure), new ReduceInformation(0, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, { new Terminator(KeywordType.Function), new ReduceInformation(0, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, }, "4b4367f6-547c-48dd-9c79-dedf02be09aa") },
+ { "fc46d9de-be4c-4926-9fb2-dbb70fd7fe64", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.VarDeclaration), "6cc5a977-b2f5-450f-9022-a831d1f02804"}, { new NonTerminator(NonTerminatorType.IdentifierList), "232721fd-a9bb-44be-861f-0e5dc342ccd8"}, { Terminator.IdentifierTerminator, "9dc91f71-af68-404e-b670-a90589c075ea"},}, new Dictionary{ }, "fc46d9de-be4c-4926-9fb2-dbb70fd7fe64") },
+ { "acc8f59f-3ccf-41cc-b390-befe49a441fc", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Semicolon), "73839b71-0170-4ed7-b301-cf9520bdde12"},}, new Dictionary{ }, "acc8f59f-3ccf-41cc-b390-befe49a441fc") },
+ { "129a8062-876b-46ff-b339-8044078a546e", new GeneratedTransformer(new Dictionary{ { new Terminator(OperatorType.Equal), "4a53b2fc-7772-49f9-94a8-8a0a37f5e02b"},}, new Dictionary{ }, "129a8062-876b-46ff-b339-8044078a546e") },
+ { "a187908e-87a9-4a20-8b40-58208c38efe7", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.RightParenthesis), "f705e5ad-198b-45a7-a2ff-27eace11510f"}, { new Terminator(DelimiterType.Comma), "b4d5eac1-ef91-4843-8ac8-228ccd299991"},}, new Dictionary{ }, "a187908e-87a9-4a20-8b40-58208c38efe7") },
+ { "9ebc6625-fade-41b7-a22e-653259af07f4", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.RightParenthesis), new ReduceInformation(1, new NonTerminator(NonTerminatorType.IdentifierList))}, { new Terminator(DelimiterType.Comma), new ReduceInformation(1, new NonTerminator(NonTerminatorType.IdentifierList))}, }, "9ebc6625-fade-41b7-a22e-653259af07f4") },
+ { "1ab4bd3d-2471-48fa-bc82-d5ab024b6f1d", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.CompoundStatement), "4fcf185b-e810-4326-aca8-5e1b2a4e442b"}, { new Terminator(KeywordType.Begin), "2972cb43-de3b-4742-a7d8-4dea7f7c4c6e"}, { new NonTerminator(NonTerminatorType.Subprogram), "15a54624-b0e2-4d3e-8d3f-915f65384f05"}, { new NonTerminator(NonTerminatorType.SubprogramHead), "ff4bb880-aad4-49e9-a749-378fa72f3c82"}, { new Terminator(KeywordType.Procedure), "3c220d8c-30c9-4f2c-a55c-9ca597867936"}, { new Terminator(KeywordType.Function), "bf5ac000-c80f-4262-8ed6-788f9caec10a"},}, new Dictionary{ }, "1ab4bd3d-2471-48fa-bc82-d5ab024b6f1d") },
+ { "6cc5a977-b2f5-450f-9022-a831d1f02804", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Semicolon), "34de596a-d373-42ba-a3b1-05945067cc3d"},}, new Dictionary{ }, "6cc5a977-b2f5-450f-9022-a831d1f02804") },
+ { "232721fd-a9bb-44be-861f-0e5dc342ccd8", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Colon), "3de4039d-4e64-4dd4-8225-f10453c25c4b"}, { new Terminator(DelimiterType.Comma), "d7aee9d0-2bdb-435b-93e1-f605ae512af4"},}, new Dictionary{ }, "232721fd-a9bb-44be-861f-0e5dc342ccd8") },
+ { "9dc91f71-af68-404e-b670-a90589c075ea", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Colon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.IdentifierList))}, { new Terminator(DelimiterType.Comma), new ReduceInformation(1, new NonTerminator(NonTerminatorType.IdentifierList))}, }, "9dc91f71-af68-404e-b670-a90589c075ea") },
+ { "73839b71-0170-4ed7-b301-cf9520bdde12", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "5bde9e35-03dd-441d-af04-8b1bd47c5cfb"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(3, new NonTerminator(NonTerminatorType.ConstDeclarations))}, { new Terminator(KeywordType.Var), new ReduceInformation(3, new NonTerminator(NonTerminatorType.ConstDeclarations))}, }, "73839b71-0170-4ed7-b301-cf9520bdde12") },
+ { "4a53b2fc-7772-49f9-94a8-8a0a37f5e02b", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ConstValue), "11dbb701-abb1-411f-b897-2f47110499fb"}, { new Terminator(OperatorType.Plus), "886299a0-b60e-427c-8aeb-7f294f8bf571"}, { new Terminator(OperatorType.Minus), "5434a693-e276-4d9d-b818-7e167144611a"}, { Terminator.NumberTerminator, "291ecbe9-74dd-45d6-8f3b-35a0d0699df4"}, { new Terminator(DelimiterType.SingleQuotation), "82dcf9dd-612e-45b2-978d-97fb06b3c4c6"},}, new Dictionary{ }, "4a53b2fc-7772-49f9-94a8-8a0a37f5e02b") },
+ { "f705e5ad-198b-45a7-a2ff-27eace11510f", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(5, new NonTerminator(NonTerminatorType.ProgramHead))}, }, "f705e5ad-198b-45a7-a2ff-27eace11510f") },
+ { "b4d5eac1-ef91-4843-8ac8-228ccd299991", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "9b310f09-0dd4-40ed-a7f9-272ac1f0c063"},}, new Dictionary{ }, "b4d5eac1-ef91-4843-8ac8-228ccd299991") },
+ { "4fcf185b-e810-4326-aca8-5e1b2a4e442b", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Period), new ReduceInformation(4, new NonTerminator(NonTerminatorType.ProgramBody))}, }, "4fcf185b-e810-4326-aca8-5e1b2a4e442b") },
+ { "2972cb43-de3b-4742-a7d8-4dea7f7c4c6e", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.StatementList), "de541851-6d4d-4308-a1c5-a9a6a2fa4ae4"}, { new NonTerminator(NonTerminatorType.Statement), "ab6c0946-5914-4e72-8c12-4b6e7c245045"}, { new NonTerminator(NonTerminatorType.Variable), "112924ad-56a4-4b25-b473-3719cf9f146d"}, { Terminator.IdentifierTerminator, "2ca36d82-352b-460d-9a9c-3820d154ae40"}, { new NonTerminator(NonTerminatorType.ProcedureCall), "fdc408d0-ab70-4f3a-a6cc-948dcefd9bec"}, { new NonTerminator(NonTerminatorType.CompoundStatement), "7a6f8cbf-bf57-4d0d-8f88-f51b3ff6cb72"}, { new Terminator(KeywordType.If), "73074719-3be9-46aa-80f3-1e8ee6a9b24b"}, { new Terminator(KeywordType.For), "a53fc2b7-1c76-4892-aefa-96321460277b"}, { new Terminator(KeywordType.Begin), "387138b7-6e8b-4b44-b497-4da7e03d863a"},}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, }, "2972cb43-de3b-4742-a7d8-4dea7f7c4c6e") },
+ { "15a54624-b0e2-4d3e-8d3f-915f65384f05", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Semicolon), "af8eafde-e50f-46bc-b747-a67e16693bee"},}, new Dictionary{ }, "15a54624-b0e2-4d3e-8d3f-915f65384f05") },
+ { "ff4bb880-aad4-49e9-a749-378fa72f3c82", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Semicolon), "c6b3e4e8-96e4-4ef3-bfac-6a858f030eef"},}, new Dictionary{ }, "ff4bb880-aad4-49e9-a749-378fa72f3c82") },
+ { "3c220d8c-30c9-4f2c-a55c-9ca597867936", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "bbb11ea4-c467-464c-99ef-0cf91c890123"},}, new Dictionary{ }, "3c220d8c-30c9-4f2c-a55c-9ca597867936") },
+ { "bf5ac000-c80f-4262-8ed6-788f9caec10a", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "470ffe76-12ee-46f9-af28-d4892837b726"},}, new Dictionary{ }, "bf5ac000-c80f-4262-8ed6-788f9caec10a") },
+ { "34de596a-d373-42ba-a3b1-05945067cc3d", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.IdentifierList), "bb0cab48-5725-4672-9ce7-82bceaa8386a"}, { Terminator.IdentifierTerminator, "9dc91f71-af68-404e-b670-a90589c075ea"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(3, new NonTerminator(NonTerminatorType.VarDeclarations))}, }, "34de596a-d373-42ba-a3b1-05945067cc3d") },
+ { "3de4039d-4e64-4dd4-8225-f10453c25c4b", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Type), "79c4472b-9edb-4602-a84e-654a2a772986"}, { new NonTerminator(NonTerminatorType.BasicType), "99f1a400-2870-4bc4-a665-7ab61eff9dd9"}, { new Terminator(KeywordType.Array), "3cbf837d-e48f-44d0-943e-f5f79706ae8a"}, { new Terminator(KeywordType.Integer), "7a45914c-6e41-40b0-af8d-3aee3f58b52e"}, { new Terminator(KeywordType.Real), "0c324ffd-6717-4e32-84e1-b20373faf37a"}, { new Terminator(KeywordType.Boolean), "2038cb87-ab6e-4cdf-875f-99acab7590d6"}, { new Terminator(KeywordType.Character), "dcf92153-cf0c-4c29-858a-e1ae80990401"},}, new Dictionary{ }, "3de4039d-4e64-4dd4-8225-f10453c25c4b") },
+ { "d7aee9d0-2bdb-435b-93e1-f605ae512af4", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "3592d1e1-38b1-4571-aa09-49da844e3acc"},}, new Dictionary{ }, "d7aee9d0-2bdb-435b-93e1-f605ae512af4") },
+ { "5bde9e35-03dd-441d-af04-8b1bd47c5cfb", new GeneratedTransformer(new Dictionary{ { new Terminator(OperatorType.Equal), "b03f9c16-0985-46d4-9f4c-6cb91f19ad99"},}, new Dictionary{ }, "5bde9e35-03dd-441d-af04-8b1bd47c5cfb") },
+ { "11dbb701-abb1-411f-b897-2f47110499fb", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.ConstDeclaration))}, }, "11dbb701-abb1-411f-b897-2f47110499fb") },
+ { "886299a0-b60e-427c-8aeb-7f294f8bf571", new GeneratedTransformer(new Dictionary{ { Terminator.NumberTerminator, "7e17fb4a-f5c5-46c4-89f8-9d01efa480dd"},}, new Dictionary{ }, "886299a0-b60e-427c-8aeb-7f294f8bf571") },
+ { "5434a693-e276-4d9d-b818-7e167144611a", new GeneratedTransformer(new Dictionary{ { Terminator.NumberTerminator, "22014225-99f5-49d3-b83c-31b813913b6c"},}, new Dictionary{ }, "5434a693-e276-4d9d-b818-7e167144611a") },
+ { "291ecbe9-74dd-45d6-8f3b-35a0d0699df4", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.ConstValue))}, }, "291ecbe9-74dd-45d6-8f3b-35a0d0699df4") },
+ { "82dcf9dd-612e-45b2-978d-97fb06b3c4c6", new GeneratedTransformer(new Dictionary{ { Terminator.CharacterTerminator, "eb16f762-41c1-4a85-804f-b50e53567248"},}, new Dictionary{ }, "82dcf9dd-612e-45b2-978d-97fb06b3c4c6") },
+ { "9b310f09-0dd4-40ed-a7f9-272ac1f0c063", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.RightParenthesis), new ReduceInformation(3, new NonTerminator(NonTerminatorType.IdentifierList))}, { new Terminator(DelimiterType.Comma), new ReduceInformation(3, new NonTerminator(NonTerminatorType.IdentifierList))}, }, "9b310f09-0dd4-40ed-a7f9-272ac1f0c063") },
+ { "de541851-6d4d-4308-a1c5-a9a6a2fa4ae4", new GeneratedTransformer(new Dictionary{ { new Terminator(KeywordType.End), "efdc7526-b350-4015-8efd-16003eba8d9c"}, { new Terminator(DelimiterType.Semicolon), "5f77fc2d-16b7-4de2-aa95-a5b4bf60ead7"},}, new Dictionary{ }, "de541851-6d4d-4308-a1c5-a9a6a2fa4ae4") },
+ { "ab6c0946-5914-4e72-8c12-4b6e7c245045", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.StatementList))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.StatementList))}, }, "ab6c0946-5914-4e72-8c12-4b6e7c245045") },
+ { "112924ad-56a4-4b25-b473-3719cf9f146d", new GeneratedTransformer(new Dictionary{ { new Terminator(OperatorType.Assign), "3089ff70-d821-4d47-b629-7902c28092b3"},}, new Dictionary{ }, "112924ad-56a4-4b25-b473-3719cf9f146d") },
+ { "2ca36d82-352b-460d-9a9c-3820d154ae40", new GeneratedTransformer(new Dictionary{ { new Terminator(OperatorType.Assign), "ab8a793a-dceb-4979-bedd-9733ce873924"}, { new NonTerminator(NonTerminatorType.IdVarPart), "31eb4679-1bff-483a-9102-7dcbe650e8f6"}, { new Terminator(DelimiterType.LeftSquareBracket), "34b47858-5b58-43b3-85ce-b49447c43b6f"}, { new Terminator(DelimiterType.LeftParenthesis), "6aee9176-caf7-4607-8c83-07df27c90994"},}, new Dictionary{ { new Terminator(OperatorType.Assign), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.ProcedureCall))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.ProcedureCall))}, }, "2ca36d82-352b-460d-9a9c-3820d154ae40") },
+ { "fdc408d0-ab70-4f3a-a6cc-948dcefd9bec", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Statement))}, }, "fdc408d0-ab70-4f3a-a6cc-948dcefd9bec") },
+ { "7a6f8cbf-bf57-4d0d-8f88-f51b3ff6cb72", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Statement))}, }, "7a6f8cbf-bf57-4d0d-8f88-f51b3ff6cb72") },
+ { "73074719-3be9-46aa-80f3-1e8ee6a9b24b", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Expression), "f51d5b3c-8c78-47c7-a8d8-e83347cf8236"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "119fac76-96fa-48e8-ac9c-6face14ae1e4"}, { new NonTerminator(NonTerminatorType.Term), "f81767c4-c538-40f6-9d6e-0e0028e43d0a"}, { new NonTerminator(NonTerminatorType.Factor), "fa6197c4-8a18-4901-b9e5-c8a5e9e7d32f"}, { Terminator.NumberTerminator, "d3912ce1-c4e7-4011-8495-39467b183372"}, { new NonTerminator(NonTerminatorType.Variable), "da07c5e4-2d98-4b01-9973-0fd8b68c6fa8"}, { new Terminator(DelimiterType.LeftParenthesis), "136221b1-0def-4616-a331-451c7cd8a042"}, { Terminator.IdentifierTerminator, "f8848d88-5c5c-4719-aa0b-957d66c1b45a"}, { new Terminator(KeywordType.Not), "5415b858-be1e-42df-af7c-df7f5bf4452f"}, { new Terminator(OperatorType.Minus), "d53f38d7-a4c5-4a3d-8821-f702d78332c7"},}, new Dictionary{ }, "73074719-3be9-46aa-80f3-1e8ee6a9b24b") },
+ { "a53fc2b7-1c76-4892-aefa-96321460277b", new GeneratedTransformer(new Dictionary{ { Terminator.IdentifierTerminator, "68ff92a9-820d-455c-bbd7-c833a3da691d"},}, new Dictionary{ }, "a53fc2b7-1c76-4892-aefa-96321460277b") },
+ { "387138b7-6e8b-4b44-b497-4da7e03d863a", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.StatementList), "002712a2-e78c-4d85-b962-4318505609ce"}, { new NonTerminator(NonTerminatorType.Statement), "ab6c0946-5914-4e72-8c12-4b6e7c245045"}, { new NonTerminator(NonTerminatorType.Variable), "112924ad-56a4-4b25-b473-3719cf9f146d"}, { Terminator.IdentifierTerminator, "2ca36d82-352b-460d-9a9c-3820d154ae40"}, { new NonTerminator(NonTerminatorType.ProcedureCall), "fdc408d0-ab70-4f3a-a6cc-948dcefd9bec"}, { new NonTerminator(NonTerminatorType.CompoundStatement), "7a6f8cbf-bf57-4d0d-8f88-f51b3ff6cb72"}, { new Terminator(KeywordType.If), "73074719-3be9-46aa-80f3-1e8ee6a9b24b"}, { new Terminator(KeywordType.For), "a53fc2b7-1c76-4892-aefa-96321460277b"}, { new Terminator(KeywordType.Begin), "387138b7-6e8b-4b44-b497-4da7e03d863a"},}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, }, "387138b7-6e8b-4b44-b497-4da7e03d863a") },
+ { "af8eafde-e50f-46bc-b747-a67e16693bee", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(3, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, { new Terminator(KeywordType.Procedure), new ReduceInformation(3, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, { new Terminator(KeywordType.Function), new ReduceInformation(3, new NonTerminator(NonTerminatorType.SubprogramDeclarations))}, }, "af8eafde-e50f-46bc-b747-a67e16693bee") },
+ { "c6b3e4e8-96e4-4ef3-bfac-6a858f030eef", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.SubprogramBody), "a3ad216b-5661-4afd-b51b-3c8aa5b15e05"}, { new NonTerminator(NonTerminatorType.ConstDeclarations), "ba747585-1e22-4f50-9324-adcaa0620a94"}, { new Terminator(KeywordType.Const), "9bbeb6e3-e7ec-42e8-8d5f-76e8f0691a52"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(0, new NonTerminator(NonTerminatorType.ConstDeclarations))}, { new Terminator(KeywordType.Var), new ReduceInformation(0, new NonTerminator(NonTerminatorType.ConstDeclarations))}, }, "c6b3e4e8-96e4-4ef3-bfac-6a858f030eef") },
+ { "bbb11ea4-c467-464c-99ef-0cf91c890123", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.FormalParameter), "41bbd3f0-e644-4b9c-b32c-6da8b42e3c46"}, { new Terminator(DelimiterType.LeftParenthesis), "7e1faef8-0936-4e9f-ad98-14d50c4712da"},}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(0, new NonTerminator(NonTerminatorType.FormalParameter))}, }, "bbb11ea4-c467-464c-99ef-0cf91c890123") },
+ { "470ffe76-12ee-46f9-af28-d4892837b726", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.FormalParameter), "2b1a4a2a-b924-4275-b22a-0a82441e7e59"}, { new Terminator(DelimiterType.LeftParenthesis), "f154300a-950f-4931-b34a-efd476c81bef"},}, new Dictionary{ { new Terminator(DelimiterType.Colon), new ReduceInformation(0, new NonTerminator(NonTerminatorType.FormalParameter))}, }, "470ffe76-12ee-46f9-af28-d4892837b726") },
+ { "bb0cab48-5725-4672-9ce7-82bceaa8386a", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Colon), "6a803503-1ed2-4eda-8aef-46acc4cc2e4b"}, { new Terminator(DelimiterType.Comma), "d7aee9d0-2bdb-435b-93e1-f605ae512af4"},}, new Dictionary{ }, "bb0cab48-5725-4672-9ce7-82bceaa8386a") },
+ { "79c4472b-9edb-4602-a84e-654a2a772986", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.VarDeclaration))}, }, "79c4472b-9edb-4602-a84e-654a2a772986") },
+ { "99f1a400-2870-4bc4-a665-7ab61eff9dd9", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Type))}, }, "99f1a400-2870-4bc4-a665-7ab61eff9dd9") },
+ { "3cbf837d-e48f-44d0-943e-f5f79706ae8a", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.LeftSquareBracket), "9d6742fe-38a1-4994-930d-88269966cc23"},}, new Dictionary{ }, "3cbf837d-e48f-44d0-943e-f5f79706ae8a") },
+ { "7a45914c-6e41-40b0-af8d-3aee3f58b52e", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.BasicType))}, }, "7a45914c-6e41-40b0-af8d-3aee3f58b52e") },
+ { "0c324ffd-6717-4e32-84e1-b20373faf37a", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.BasicType))}, }, "0c324ffd-6717-4e32-84e1-b20373faf37a") },
+ { "2038cb87-ab6e-4cdf-875f-99acab7590d6", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.BasicType))}, }, "2038cb87-ab6e-4cdf-875f-99acab7590d6") },
+ { "dcf92153-cf0c-4c29-858a-e1ae80990401", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.BasicType))}, }, "dcf92153-cf0c-4c29-858a-e1ae80990401") },
+ { "3592d1e1-38b1-4571-aa09-49da844e3acc", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Colon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.IdentifierList))}, { new Terminator(DelimiterType.Comma), new ReduceInformation(3, new NonTerminator(NonTerminatorType.IdentifierList))}, }, "3592d1e1-38b1-4571-aa09-49da844e3acc") },
+ { "b03f9c16-0985-46d4-9f4c-6cb91f19ad99", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ConstValue), "afeb2a41-d58c-4825-85c4-9ac68045151b"}, { new Terminator(OperatorType.Plus), "886299a0-b60e-427c-8aeb-7f294f8bf571"}, { new Terminator(OperatorType.Minus), "5434a693-e276-4d9d-b818-7e167144611a"}, { Terminator.NumberTerminator, "291ecbe9-74dd-45d6-8f3b-35a0d0699df4"}, { new Terminator(DelimiterType.SingleQuotation), "82dcf9dd-612e-45b2-978d-97fb06b3c4c6"},}, new Dictionary{ }, "b03f9c16-0985-46d4-9f4c-6cb91f19ad99") },
+ { "7e17fb4a-f5c5-46c4-89f8-9d01efa480dd", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(2, new NonTerminator(NonTerminatorType.ConstValue))}, }, "7e17fb4a-f5c5-46c4-89f8-9d01efa480dd") },
+ { "22014225-99f5-49d3-b83c-31b813913b6c", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(2, new NonTerminator(NonTerminatorType.ConstValue))}, }, "22014225-99f5-49d3-b83c-31b813913b6c") },
+ { "eb16f762-41c1-4a85-804f-b50e53567248", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.SingleQuotation), "b767a903-3f8a-4b6e-9561-3b9cf8e17297"},}, new Dictionary{ }, "eb16f762-41c1-4a85-804f-b50e53567248") },
+ { "efdc7526-b350-4015-8efd-16003eba8d9c", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Period), new ReduceInformation(3, new NonTerminator(NonTerminatorType.CompoundStatement))}, }, "efdc7526-b350-4015-8efd-16003eba8d9c") },
+ { "5f77fc2d-16b7-4de2-aa95-a5b4bf60ead7", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Statement), "671559f2-ea7c-4806-9237-238b712838ac"}, { new NonTerminator(NonTerminatorType.Variable), "112924ad-56a4-4b25-b473-3719cf9f146d"}, { Terminator.IdentifierTerminator, "2ca36d82-352b-460d-9a9c-3820d154ae40"}, { new NonTerminator(NonTerminatorType.ProcedureCall), "fdc408d0-ab70-4f3a-a6cc-948dcefd9bec"}, { new NonTerminator(NonTerminatorType.CompoundStatement), "7a6f8cbf-bf57-4d0d-8f88-f51b3ff6cb72"}, { new Terminator(KeywordType.If), "73074719-3be9-46aa-80f3-1e8ee6a9b24b"}, { new Terminator(KeywordType.For), "a53fc2b7-1c76-4892-aefa-96321460277b"}, { new Terminator(KeywordType.Begin), "387138b7-6e8b-4b44-b497-4da7e03d863a"},}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(0, new NonTerminator(NonTerminatorType.Statement))}, }, "5f77fc2d-16b7-4de2-aa95-a5b4bf60ead7") },
+ { "3089ff70-d821-4d47-b629-7902c28092b3", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Expression), "6964ddd2-21de-4312-a758-5636b143bacd"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "03290228-a79b-4e34-bb13-4024dd4f152a"}, { new NonTerminator(NonTerminatorType.Term), "92777788-9c64-4113-bdd7-43c242cb303b"}, { new NonTerminator(NonTerminatorType.Factor), "36ed9c90-648c-4e06-aceb-ae7234ef4c2a"}, { Terminator.NumberTerminator, "1f8655c6-2b50-4bd5-b8e8-251042ebdf22"}, { new NonTerminator(NonTerminatorType.Variable), "73a82ead-96f2-43d1-be91-b78c04461c8d"}, { new Terminator(DelimiterType.LeftParenthesis), "957917ce-ce2f-484e-9976-367866ffa98a"}, { Terminator.IdentifierTerminator, "f83fe52e-9f6c-469b-92db-35d7ea1c5ecc"}, { new Terminator(KeywordType.Not), "d80ea1cf-f70f-46ce-b045-4e9dedce06cf"}, { new Terminator(OperatorType.Minus), "f1b5949e-6a02-4c6e-85b4-9709080f5c77"},}, new Dictionary{ }, "3089ff70-d821-4d47-b629-7902c28092b3") },
+ { "ab8a793a-dceb-4979-bedd-9733ce873924", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Expression), "a13444d2-e2f1-401c-affc-149323b976cd"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "03290228-a79b-4e34-bb13-4024dd4f152a"}, { new NonTerminator(NonTerminatorType.Term), "92777788-9c64-4113-bdd7-43c242cb303b"}, { new NonTerminator(NonTerminatorType.Factor), "36ed9c90-648c-4e06-aceb-ae7234ef4c2a"}, { Terminator.NumberTerminator, "1f8655c6-2b50-4bd5-b8e8-251042ebdf22"}, { new NonTerminator(NonTerminatorType.Variable), "73a82ead-96f2-43d1-be91-b78c04461c8d"}, { new Terminator(DelimiterType.LeftParenthesis), "957917ce-ce2f-484e-9976-367866ffa98a"}, { Terminator.IdentifierTerminator, "f83fe52e-9f6c-469b-92db-35d7ea1c5ecc"}, { new Terminator(KeywordType.Not), "d80ea1cf-f70f-46ce-b045-4e9dedce06cf"}, { new Terminator(OperatorType.Minus), "f1b5949e-6a02-4c6e-85b4-9709080f5c77"},}, new Dictionary{ }, "ab8a793a-dceb-4979-bedd-9733ce873924") },
+ { "31eb4679-1bff-483a-9102-7dcbe650e8f6", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(OperatorType.Assign), new ReduceInformation(2, new NonTerminator(NonTerminatorType.Variable))}, }, "31eb4679-1bff-483a-9102-7dcbe650e8f6") },
+ { "34b47858-5b58-43b3-85ce-b49447c43b6f", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ExpressionList), "eb18577b-10bf-4e74-8371-dba96b315d79"}, { new NonTerminator(NonTerminatorType.Expression), "09cac309-abed-414e-8474-6b60d13f6cfa"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "bccb9e4b-0144-4242-9be0-44e084fa0288"}, { new NonTerminator(NonTerminatorType.Term), "71aebecb-07f7-4c81-835c-c9d30e8c591c"}, { new NonTerminator(NonTerminatorType.Factor), "c912911e-3115-461e-a0b0-8a928d65964f"}, { Terminator.NumberTerminator, "f73caf00-2936-4127-8f89-315d90db052b"}, { new NonTerminator(NonTerminatorType.Variable), "ba1ee670-0706-4663-b78a-af6dc5c23f48"}, { new Terminator(DelimiterType.LeftParenthesis), "2a561d9c-4157-4dc7-be4c-4d914f111ffe"}, { Terminator.IdentifierTerminator, "041f60de-3c2b-4aaf-8284-b02aa5db505f"}, { new Terminator(KeywordType.Not), "65c46b92-1ace-4c7e-95cd-3ded2b9a2b4c"}, { new Terminator(OperatorType.Minus), "7928c972-6f98-47d1-a422-bdd087c5c11e"},}, new Dictionary{ }, "34b47858-5b58-43b3-85ce-b49447c43b6f") },
+ { "6aee9176-caf7-4607-8c83-07df27c90994", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ExpressionList), "54052707-35b5-4878-8797-3805a72670da"}, { new NonTerminator(NonTerminatorType.Expression), "48274443-b7c1-435d-aaaa-8a09601273f9"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "86f8df3e-3b19-48fe-a2cd-34bc036a4d16"}, { new NonTerminator(NonTerminatorType.Term), "2db80379-6dfa-40eb-9c52-02ab09351164"}, { new NonTerminator(NonTerminatorType.Factor), "0f734f56-cf8a-4d37-bb2a-7be4cb4cda0d"}, { Terminator.NumberTerminator, "12f3cddc-f277-4425-9eca-38884494e86e"}, { new NonTerminator(NonTerminatorType.Variable), "87838683-e4f8-4027-88ee-75bc41d6c7d3"}, { new Terminator(DelimiterType.LeftParenthesis), "94925daf-54ea-4162-ae04-0fa6bb913c83"}, { Terminator.IdentifierTerminator, "7546d1eb-c40e-4e41-83e9-0ffc2b4f587f"}, { new Terminator(KeywordType.Not), "4f30dea8-6760-46df-809f-f6b6474b2c8b"}, { new Terminator(OperatorType.Minus), "5dceebf4-1f3b-4767-b816-cf24661377ff"},}, new Dictionary{ }, "6aee9176-caf7-4607-8c83-07df27c90994") },
+ { "f51d5b3c-8c78-47c7-a8d8-e83347cf8236", new GeneratedTransformer(new Dictionary{ { new Terminator(KeywordType.Then), "08352f8e-b7b6-4c3c-a9b5-724c1f011422"},}, new Dictionary{ }, "f51d5b3c-8c78-47c7-a8d8-e83347cf8236") },
+ { "119fac76-96fa-48e8-ac9c-6face14ae1e4", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.RelationOperator), "c9c19d32-7795-43b2-87b7-7af407dcf819"}, { new Terminator(OperatorType.Equal), "60dea2d7-d339-46dc-9fa3-d0798b7a4f5a"}, { new Terminator(OperatorType.NotEqual), "4e399383-d018-47f4-87d5-2418bf4b6b29"}, { new Terminator(OperatorType.Less), "a81a5d5f-1a88-43f2-abee-6db0fa7f3fa4"}, { new Terminator(OperatorType.LessEqual), "cf782124-1ea5-49aa-a517-45fa0ab10178"}, { new Terminator(OperatorType.Greater), "75215ba5-2f7f-4b58-a20a-4128349739eb"}, { new Terminator(OperatorType.GreaterEqual), "1e7ec66b-82ce-4ccf-860c-5162c9565f7d"}, { new NonTerminator(NonTerminatorType.AddOperator), "c5175a48-0bf4-4f9d-9113-c1ed68defb32"}, { new Terminator(OperatorType.Plus), "38822c33-4ba5-4392-ba95-563f93b165e7"}, { new Terminator(OperatorType.Minus), "6f247b41-6a05-41b6-9d79-ead414b3e4c7"}, { new Terminator(KeywordType.Or), "3c259c6f-e75c-4280-b176-95d6a084bd3d"},}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Expression))}, }, "119fac76-96fa-48e8-ac9c-6face14ae1e4") },
+ { "f81767c4-c538-40f6-9d6e-0e0028e43d0a", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.MultiplyOperator), "3ee1ab01-482f-42ab-bc07-045e877b8af2"}, { new Terminator(OperatorType.Multiply), "468d595b-f6df-4fdb-bb63-a555c3440509"}, { new Terminator(OperatorType.Divide), "cf2994e3-ee9b-4ddb-baf5-e30dfa0be993"}, { new Terminator(KeywordType.Divide), "6058f285-f42b-4688-8991-89f53d3b025a"}, { new Terminator(KeywordType.Mod), "4b86a3b2-9a85-4208-be25-5fc3f6e8a868"}, { new Terminator(KeywordType.And), "3622ef10-e09f-47d6-a683-b9ae2016733c"},}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Equal), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Less), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Greater), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Plus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Minus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(KeywordType.Or), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, }, "f81767c4-c538-40f6-9d6e-0e0028e43d0a") },
+ { "fa6197c4-8a18-4901-b9e5-c8a5e9e7d32f", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Equal), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Less), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Greater), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Multiply), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(KeywordType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(KeywordType.Mod), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(KeywordType.And), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Plus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(OperatorType.Minus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, { new Terminator(KeywordType.Or), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Term))}, }, "fa6197c4-8a18-4901-b9e5-c8a5e9e7d32f") },
+ { "d3912ce1-c4e7-4011-8495-39467b183372", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Equal), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Less), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Greater), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Multiply), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Mod), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.And), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Plus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Minus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Or), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, }, "d3912ce1-c4e7-4011-8495-39467b183372") },
+ { "da07c5e4-2d98-4b01-9973-0fd8b68c6fa8", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Equal), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Less), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Greater), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Multiply), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Divide), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Mod), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.And), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Plus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(OperatorType.Minus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, { new Terminator(KeywordType.Or), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Factor))}, }, "da07c5e4-2d98-4b01-9973-0fd8b68c6fa8") },
+ { "136221b1-0def-4616-a331-451c7cd8a042", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Expression), "2cb900d3-0c04-4ea9-aa49-2bd7bc0a97a4"}, { new NonTerminator(NonTerminatorType.SimpleExpression), "079b7b79-612b-4966-9a45-a29921890ddc"}, { new NonTerminator(NonTerminatorType.Term), "64ca8901-7e44-43f8-aa05-19618ec7272e"}, { new NonTerminator(NonTerminatorType.Factor), "87a8bb69-0783-4472-a058-62990d79c1e7"}, { Terminator.NumberTerminator, "4f2f81a3-31ae-4ab2-93d6-456e60b8e8de"}, { new NonTerminator(NonTerminatorType.Variable), "ed2faab9-002b-4f70-a59d-4b6545a4c182"}, { new Terminator(DelimiterType.LeftParenthesis), "473cdb76-aded-49c1-83cf-f8f138d8133a"}, { Terminator.IdentifierTerminator, "a4a0dffd-a8f4-4c3c-81a5-4f8265d4c3f0"}, { new Terminator(KeywordType.Not), "b9e61a85-f306-47f3-816b-781c46782d33"}, { new Terminator(OperatorType.Minus), "cdd3a5b5-1547-4278-b7d6-3f830faa954b"},}, new Dictionary{ }, "136221b1-0def-4616-a331-451c7cd8a042") },
+ { "f8848d88-5c5c-4719-aa0b-957d66c1b45a", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.LeftParenthesis), "f3f17430-4204-4c80-8914-9b91c91d0857"}, { new NonTerminator(NonTerminatorType.IdVarPart), "0e4ecc3e-de64-4a1c-99af-0bdbdc28ba92"}, { new Terminator(DelimiterType.LeftSquareBracket), "05bef34c-aeb8-4cc5-b5f7-d4775d9cdf99"},}, new Dictionary{ { new Terminator(KeywordType.Then), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Equal), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Less), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Greater), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Multiply), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Divide), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(KeywordType.Divide), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(KeywordType.Mod), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(KeywordType.And), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Plus), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(OperatorType.Minus), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, { new Terminator(KeywordType.Or), new ReduceInformation(0, new NonTerminator(NonTerminatorType.IdVarPart))}, }, "f8848d88-5c5c-4719-aa0b-957d66c1b45a") },
+ { "5415b858-be1e-42df-af7c-df7f5bf4452f", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Factor), "5c2a9c8a-1517-41b6-8ec7-93c885d495e9"}, { Terminator.NumberTerminator, "d3912ce1-c4e7-4011-8495-39467b183372"}, { new NonTerminator(NonTerminatorType.Variable), "da07c5e4-2d98-4b01-9973-0fd8b68c6fa8"}, { new Terminator(DelimiterType.LeftParenthesis), "136221b1-0def-4616-a331-451c7cd8a042"}, { Terminator.IdentifierTerminator, "f8848d88-5c5c-4719-aa0b-957d66c1b45a"}, { new Terminator(KeywordType.Not), "5415b858-be1e-42df-af7c-df7f5bf4452f"}, { new Terminator(OperatorType.Minus), "d53f38d7-a4c5-4a3d-8821-f702d78332c7"},}, new Dictionary{ }, "5415b858-be1e-42df-af7c-df7f5bf4452f") },
+ { "d53f38d7-a4c5-4a3d-8821-f702d78332c7", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Factor), "c8750fff-2693-4ec6-9b12-c162ec858c2f"}, { Terminator.NumberTerminator, "d3912ce1-c4e7-4011-8495-39467b183372"}, { new NonTerminator(NonTerminatorType.Variable), "da07c5e4-2d98-4b01-9973-0fd8b68c6fa8"}, { new Terminator(DelimiterType.LeftParenthesis), "136221b1-0def-4616-a331-451c7cd8a042"}, { Terminator.IdentifierTerminator, "f8848d88-5c5c-4719-aa0b-957d66c1b45a"}, { new Terminator(KeywordType.Not), "5415b858-be1e-42df-af7c-df7f5bf4452f"}, { new Terminator(OperatorType.Minus), "d53f38d7-a4c5-4a3d-8821-f702d78332c7"},}, new Dictionary{ }, "d53f38d7-a4c5-4a3d-8821-f702d78332c7") },
+ { "68ff92a9-820d-455c-bbd7-c833a3da691d", new GeneratedTransformer(new Dictionary{ { new Terminator(OperatorType.Assign), "6d40c61c-cc25-4507-b4ff-dd0e87eecd1f"},}, new Dictionary{ }, "68ff92a9-820d-455c-bbd7-c833a3da691d") },
+ { "002712a2-e78c-4d85-b962-4318505609ce", new GeneratedTransformer(new Dictionary{ { new Terminator(KeywordType.End), "8a166dc6-8d66-4e96-b949-97382f2b89e9"}, { new Terminator(DelimiterType.Semicolon), "5f77fc2d-16b7-4de2-aa95-a5b4bf60ead7"},}, new Dictionary{ }, "002712a2-e78c-4d85-b962-4318505609ce") },
+ { "a3ad216b-5661-4afd-b51b-3c8aa5b15e05", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.Subprogram))}, }, "a3ad216b-5661-4afd-b51b-3c8aa5b15e05") },
+ { "ba747585-1e22-4f50-9324-adcaa0620a94", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.VarDeclarations), "bef9ba6b-d573-4280-954e-20822f48191c"}, { new Terminator(KeywordType.Var), "fc46d9de-be4c-4926-9fb2-dbb70fd7fe64"},}, new Dictionary{ { new Terminator(KeywordType.Begin), new ReduceInformation(0, new NonTerminator(NonTerminatorType.VarDeclarations))}, }, "ba747585-1e22-4f50-9324-adcaa0620a94") },
+ { "41bbd3f0-e644-4b9c-b32c-6da8b42e3c46", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.SubprogramHead))}, }, "41bbd3f0-e644-4b9c-b32c-6da8b42e3c46") },
+ { "7e1faef8-0936-4e9f-ad98-14d50c4712da", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ParameterList), "0180b32a-9241-4ca4-b347-d6531dca4a3c"}, { new NonTerminator(NonTerminatorType.Parameter), "e692fdbb-2566-4e54-ac73-c38c84074eca"}, { new NonTerminator(NonTerminatorType.VarParameter), "a32aefff-0ed1-4bae-a3fd-532141d91533"}, { new NonTerminator(NonTerminatorType.ValueParameter), "01389774-4d1f-4ad4-b947-38167c39ac54"}, { new Terminator(KeywordType.Var), "5a784796-e20c-43c1-baae-86fed3b82835"}, { new NonTerminator(NonTerminatorType.IdentifierList), "20774c5b-8cf2-402f-b07c-95fac09442ec"}, { Terminator.IdentifierTerminator, "9dc91f71-af68-404e-b670-a90589c075ea"},}, new Dictionary{ }, "7e1faef8-0936-4e9f-ad98-14d50c4712da") },
+ { "2b1a4a2a-b924-4275-b22a-0a82441e7e59", new GeneratedTransformer(new Dictionary{ { new Terminator(DelimiterType.Colon), "9f04f841-8da4-4eab-8bbb-c48e95a059c0"},}, new Dictionary{ }, "2b1a4a2a-b924-4275-b22a-0a82441e7e59") },
+ { "f154300a-950f-4931-b34a-efd476c81bef", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.ParameterList), "402c0d68-9a58-445b-b4b0-4f336a49639f"}, { new NonTerminator(NonTerminatorType.Parameter), "e692fdbb-2566-4e54-ac73-c38c84074eca"}, { new NonTerminator(NonTerminatorType.VarParameter), "a32aefff-0ed1-4bae-a3fd-532141d91533"}, { new NonTerminator(NonTerminatorType.ValueParameter), "01389774-4d1f-4ad4-b947-38167c39ac54"}, { new Terminator(KeywordType.Var), "5a784796-e20c-43c1-baae-86fed3b82835"}, { new NonTerminator(NonTerminatorType.IdentifierList), "20774c5b-8cf2-402f-b07c-95fac09442ec"}, { Terminator.IdentifierTerminator, "9dc91f71-af68-404e-b670-a90589c075ea"},}, new Dictionary{ }, "f154300a-950f-4931-b34a-efd476c81bef") },
+ { "6a803503-1ed2-4eda-8aef-46acc4cc2e4b", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Type), "cce01b45-54b6-47a5-ace8-3d8eb0a3bd89"}, { new NonTerminator(NonTerminatorType.BasicType), "99f1a400-2870-4bc4-a665-7ab61eff9dd9"}, { new Terminator(KeywordType.Array), "3cbf837d-e48f-44d0-943e-f5f79706ae8a"}, { new Terminator(KeywordType.Integer), "7a45914c-6e41-40b0-af8d-3aee3f58b52e"}, { new Terminator(KeywordType.Real), "0c324ffd-6717-4e32-84e1-b20373faf37a"}, { new Terminator(KeywordType.Boolean), "2038cb87-ab6e-4cdf-875f-99acab7590d6"}, { new Terminator(KeywordType.Character), "dcf92153-cf0c-4c29-858a-e1ae80990401"},}, new Dictionary{ }, "6a803503-1ed2-4eda-8aef-46acc4cc2e4b") },
+ { "9d6742fe-38a1-4994-930d-88269966cc23", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.Period), "a0a3ec7c-bfa6-4073-9cbc-1e2c8ac272ad"}, { Terminator.NumberTerminator, "6e9a3216-99ad-4c55-9e56-060a672f6987"},}, new Dictionary{ }, "9d6742fe-38a1-4994-930d-88269966cc23") },
+ { "afeb2a41-d58c-4825-85c4-9ac68045151b", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(5, new NonTerminator(NonTerminatorType.ConstDeclaration))}, }, "afeb2a41-d58c-4825-85c4-9ac68045151b") },
+ { "b767a903-3f8a-4b6e-9561-3b9cf8e17297", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.ConstValue))}, }, "b767a903-3f8a-4b6e-9561-3b9cf8e17297") },
+ { "671559f2-ea7c-4806-9237-238b712838ac", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(3, new NonTerminator(NonTerminatorType.StatementList))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.StatementList))}, }, "671559f2-ea7c-4806-9237-238b712838ac") },
+ { "6964ddd2-21de-4312-a758-5636b143bacd", new GeneratedTransformer(new Dictionary{}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(3, new NonTerminator(NonTerminatorType.Statement))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(3, new NonTerminator(NonTerminatorType.Statement))}, }, "6964ddd2-21de-4312-a758-5636b143bacd") },
+ { "03290228-a79b-4e34-bb13-4024dd4f152a", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.RelationOperator), "587568c7-1b64-46d0-94e8-9c2693454e15"}, { new Terminator(OperatorType.Equal), "60dea2d7-d339-46dc-9fa3-d0798b7a4f5a"}, { new Terminator(OperatorType.NotEqual), "4e399383-d018-47f4-87d5-2418bf4b6b29"}, { new Terminator(OperatorType.Less), "a81a5d5f-1a88-43f2-abee-6db0fa7f3fa4"}, { new Terminator(OperatorType.LessEqual), "cf782124-1ea5-49aa-a517-45fa0ab10178"}, { new Terminator(OperatorType.Greater), "75215ba5-2f7f-4b58-a20a-4128349739eb"}, { new Terminator(OperatorType.GreaterEqual), "1e7ec66b-82ce-4ccf-860c-5162c9565f7d"}, { new NonTerminator(NonTerminatorType.AddOperator), "d356e915-8afb-44c3-84bf-5783b67c1d30"}, { new Terminator(OperatorType.Plus), "38822c33-4ba5-4392-ba95-563f93b165e7"}, { new Terminator(OperatorType.Minus), "6f247b41-6a05-41b6-9d79-ead414b3e4c7"}, { new Terminator(KeywordType.Or), "3c259c6f-e75c-4280-b176-95d6a084bd3d"},}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Expression))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.Expression))}, }, "03290228-a79b-4e34-bb13-4024dd4f152a") },
+ { "92777788-9c64-4113-bdd7-43c242cb303b", new GeneratedTransformer(new Dictionary{ { new NonTerminator(NonTerminatorType.MultiplyOperator), "51e2b277-c6f5-44be-87d5-d64c1466d57b"}, { new Terminator(OperatorType.Multiply), "468d595b-f6df-4fdb-bb63-a555c3440509"}, { new Terminator(OperatorType.Divide), "cf2994e3-ee9b-4ddb-baf5-e30dfa0be993"}, { new Terminator(KeywordType.Divide), "6058f285-f42b-4688-8991-89f53d3b025a"}, { new Terminator(KeywordType.Mod), "4b86a3b2-9a85-4208-be25-5fc3f6e8a868"}, { new Terminator(KeywordType.And), "3622ef10-e09f-47d6-a683-b9ae2016733c"},}, new Dictionary{ { new Terminator(KeywordType.End), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Equal), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.NotEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Less), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.LessEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Greater), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.GreaterEqual), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Plus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(OperatorType.Minus), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(KeywordType.Or), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, { new Terminator(DelimiterType.Semicolon), new ReduceInformation(1, new NonTerminator(NonTerminatorType.SimpleExpression))}, }, "92777788-9c64-4113-bdd7-43c242cb303b") },
+ { "36ed9c90-648c-4e06-aceb-ae7234ef4c2a", new GeneratedTransformer(new Dictionary