我目前正在使用Irony解析器,但我似乎还没有找到那么多文档。这次我想做一些类似于Bison中的错误恢复,在那里你得到错误所在的行和行。我不太确定如何在语法中获取错误信息,例如:
NumberLiteral number = new NumberLiteral("number");
NonTerminal S = new NonTerminal("S");
NonTerminal E = new NonTerminal("E");
S -> E;
E -> E + E
|E - E
|E / E
|E * E
|number;
this.Root = S;
RegisterOperators(1, "+", "-");
RegisterOperators(2, "*", "/");
当我输入类似“2 ++”的内容而非只是向我显示错误时,报告第1行第2行出现错误。
答案 0 :(得分:0)
我发现在Alxandr制作的github上搜索Irony克隆要容易得多:
https://github.com/Alxandr/Irony/
结构SourceLocation似乎跟踪位置,线和列。
从我所看到的,LogMessageList类型集合的Parser.ParsingContext.CurrentParseTree.ParserMessages包含解析器消息列表和发生错误的位置。
语法错误似乎以错误标记的形式出现在语法树中。这些将是TokenCategory为“Error”的令牌。 “位置”属性似乎具有位置数据。