0

だから私は Antlrworks 2 を使用して、かなり大きな文法に取り組んでいます。問題は、この文法には、解決しようとしている複数のあいまいさがあることです。

障害が発生したときにどのルールが呼び出されたかを解釈する方法があるかどうか疑問に思っていました。

たとえば、ルールを実行すると、次の出力が得られます

[@0,0:1='99',<20>,1:0]
[@1,2:1='<EOF>',<-1>,1:2]
line 1:0 mismatched input '99' expecting Digit2
(dummy 99)

どういう[@0,0:1='99',<20>,1:0]意味なのか気になります。@0または、私<20>の文法などのルール番号と何らかの関係がありますか?

4

1 に答える 1

1

以下は、デフォルトのトークン形式の内訳です。

[@{TokenIndex},{StartIndex}:{StopIndex}={Text},<{TokenType}>,{Line}:{Column}]

フィールドは{TokenType}通常、特定のレクサー ルールに対応します (定数は、生成されたレクサーで宣言されます)。ただし、この-> type(X)コマンドを任意のレクサー ルールで使用して、そのルールによって生成されたトークンを別のタイプに再割り当てできます。という名前のトークンに値20が割り当てられている場合、Fooリストの最初のトークンは、という名前のレクサー ルールまたはアクションを含むレクサールールのいずれかによって生成されたか、によって生成されたトークンに型を明示的に割り当てるユーザー定義のアクションがあります。他のルール (これは、ANTLR によって生成されたコードではなく、作成したコードになります)。Foo -> type(foo) Foo

于 2013-08-07T22:19:40.857 に答える