如何使用C#恢复Irony Parser中的解析错误?

时间:2016-02-14 00:38:08

标签: c# .net parsing error-handling irony

我目前正在使用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行出现错误。

1 个答案:

答案 0 :(得分:0)

我发现在Alxandr制作的github上搜索Irony克隆要容易得多:

https://github.com/Alxandr/Irony/

结构SourceLocation似乎跟踪位置,线和列。

从我所看到的,LogMessageList类型集合的Parser.ParsingContext.CurrentParseTree.ParserMessages包含解析器消息列表和发生错误的位置。

语法错误似乎以错误标记的形式出现在语法树中。这些将是TokenCategory为“Error”的令牌。 “位置”属性似乎具有位置数据。