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

How to recover parsing error in Irony Parser using C#?

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

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

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

结构 SourceLocation 似乎跟踪位置、行和列。

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

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