0

私はANTLR3C v3.4を使用しています。文法のスニペットは次のとおりです。

include_cmd
    : Include  Double_Quote  file_name  Double_Quote  
    {
        my_model->add_include($file_name.text, LT(0)->getLine(LT(0)));
    }
    ;

しかし、LT(0)->getLine(LT(0)) が間違った行番号を返すことがわかりました。最初の行の場合、LT() は 3 を返します。3 行目の場合は 5 を返します。常にオフセットがあるようです。

これは ANTLR3c のバグですか、それとも LT() の使用が間違っていますか? LT(0) がトークン「インクルード」を返し、そこから行番号を取得すると仮定します。

ありがとう!

4

2 に答える 2

1

回避策はここに記載されていました。根本的な原因は、入力の初期化が間違っていることです。

http://antlr.markmail.org/search/?q=Jim%20Idle#query:Jim%20Idle%20from%20list%3Aorg.antlr.antlr-interest%20from%3A%22Jim%20Idle%22+page:83 +mid:rnvmkdec65rddzua+state:結果

または、この c++ ターゲットパッチを適応させることができます

于 2013-07-01T06:26:10.477 に答える
0

最初の行にのみバグがあります (私の知る限り、C ターゲットのみ)。初期値が正しく設定されていない可能性があります。通常、解析するテキストの前に空白文字を付けます (空白は通常無視されるため)。スペースが重要な場合は、別の文字を選択してください。そのプレフィックスでは、最初のトークン (プレフィックス付きの char) の行番号が間違っていますが、他のすべては正しいです。

行番号は 1 から始まります (文字オフセットは 0 から始まります)。

于 2013-06-30T17:25:05.463 に答える