我目前正在使用Irony解析器,我似乎还没有找到那么多文档。这次我想做一些类似于野牛中的错误恢复的事情,在那里你可以得到错误所在的行和行。我真的不知道如何在这样的语法中获取错误信息,例如:
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条答案
按热度按时间p5fdfcr11#
我发现在Github上搜索Alxandr制作的Irony克隆要容易得多:https://github.com/Alxandr/Irony/的数据。
结构SourceLocation出现以跟踪位置、直线和列。
根据我所看到的,LogMessageList类型的
Parser.ParsingContext.CurrentParseTree.ParserMessages
集合包含解析器消息列表和错误发生的位置。语法错误以错误标记的形式出现在语法树中。这些令牌将具有
TokenCategory
的Error
。位置属性似乎包含位置数据。