fix: 求解FirstSet中没有考虑空产生式 (#36)

Reviewed-on: PostGuard/Canon#36
This commit is contained in:
2024-04-13 12:37:17 +08:00
parent 67deb0aa2c
commit 792c1d44f1
4 changed files with 704 additions and 632 deletions

View File

@@ -68,14 +68,23 @@ public class PascalGrammarTests
Assert.Equal("exFunction", root.Head.ProgramName.LiteralValue);
}
private static IGrammarParser GenerateGrammarParser()
[Fact]
public void SubprogramTest()
{
GrammarBuilder builder = new()
{
Generators = PascalGrammar.Grammar, Begin = new NonTerminator(NonTerminatorType.StartNonTerminator)
};
const string program = """
program main;
procedure test;
begin
end;
begin
end.
""";
Grammar grammar = builder.Build();
return grammar.ToGrammarParser();
Lexer lexer = new(program);
List<SemanticToken> tokens = lexer.Tokenize();
tokens.Add(SemanticToken.End);
ProgramStruct root = _parser.Analyse(tokens);
Assert.Equal("main", root.Head.ProgramName.LiteralValue);
}
}