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は、Position、Line、および Column を追跡するように見えます。

私が見る限り、タイプLogMessageListコレクションの Parser.ParsingContext.CurrentParseTree.ParserMessages には、パーサー メッセージのリストとエラーが発生した場所が含まれています。

構文エラーは、エラー トークンの形式で構文ツリーに表示されます。これらは、TokenCategory が「Error」のトークンになります。Location プロパティには、位置データが含まれているようです。

于 2016-06-24T19:19:40.987 に答える