2

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

4

1 回答 1

1

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

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

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

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

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

于 2016-06-24T19:19:40.987 回答