refact: 将编译中各个阶段接口化 (#35)

Reviewed-on: PostGuard/Canon#35
This commit is contained in:
2024-04-12 19:01:37 +08:00
parent f1c569ee0e
commit 67deb0aa2c
15 changed files with 748 additions and 615 deletions

View File

@@ -9,7 +9,7 @@ namespace Canon.Tests.GrammarParserTests;
public class PascalGrammarTests
{
private readonly GrammarParserBase _parser = GeneratedGrammarParser.Instance;
private readonly IGrammarParser _parser = GeneratedGrammarParser.Instance;
[Fact]
public void DoNothingTest()
@@ -24,8 +24,9 @@ public class PascalGrammarTests
List<SemanticToken> tokens = lexer.Tokenize();
tokens.Add(SemanticToken.End);
ProgramStruct root = _parser.Analyse(tokens).Convert<ProgramStruct>();
ProgramStruct root = _parser.Analyse(tokens);
Assert.Equal("DoNothing", root.Head.ProgramName.LiteralValue);
Assert.Equal(15, root.Count());
}
[Fact]
@@ -43,7 +44,7 @@ public class PascalGrammarTests
List<SemanticToken> tokens = lexer.Tokenize();
tokens.Add(SemanticToken.End);
ProgramStruct root = _parser.Analyse(tokens).Convert<ProgramStruct>();
ProgramStruct root = _parser.Analyse(tokens);
Assert.Equal("Add", root.Head.ProgramName.LiteralValue);
}
@@ -63,11 +64,11 @@ public class PascalGrammarTests
List<SemanticToken> tokens = lexer.Tokenize();
tokens.Add(SemanticToken.End);
ProgramStruct root = _parser.Analyse(tokens).Convert<ProgramStruct>();
ProgramStruct root = _parser.Analyse(tokens);
Assert.Equal("exFunction", root.Head.ProgramName.LiteralValue);
}
private static GrammarParserBase GenerateGrammarParser()
private static IGrammarParser GenerateGrammarParser()
{
GrammarBuilder builder = new()
{

View File

@@ -159,7 +159,7 @@ public class SimpleGrammarWithEmptyTests(ITestOutputHelper testOutputHelper)
};
Grammar grammar = builder.Build();
GrammarParserBase parser = grammar.ToGrammarParser();
IGrammarParser parser = grammar.ToGrammarParser();
ITransformer transformer1 = parser.BeginTransformer;
Assert.Equal(3, transformer1.ShiftTable.Count);