私はANTLRの初心者であり、既存の(そして複雑な)文法を変更する必要があります。
他のルールと解析せずにブロックを保持するルールを作成したいと思います。より明確にするために、c++で記述されたコードをインタープリターされたコードに挿入する必要があります。
2013年11月2日編集
多くのテストの後、これが私の文法、私のテスト、私が持っている結果、そして結果と欲しいものです:
文法
cppLiteral
: cppBegin cppInnerTerm cppEnd
;
cppBegin
: '//$CPP_IN$'
;
cppEnd
: '//$CPP_OUT$'
;
cppInnerTerm
: ( ~('//$CPP_OUT$') )*
;
テスト
//$CPP_IN$
txt1 txt2
//$CPP_OUT$
結果
cppLiteral ->
cppBegin = '//$CPP_IN$'
cppInnerTerm = 'txt1' 'txt2'
cppEnd = '//$CPP_OUT$'
期待される結果
cppLiteral ->
cppBegin = '//$CPP_IN$'
cppInnerTerm = 'txt1 txt2'
cppEnd = '//$CPP_OUT$'
(申し訳ありませんが、10件の評判がないため、ASTの画像を投稿できません)
次のように、3つのトークン「cppBegin」、「cppInnerTerm」、および「cppEnd」を1つのトークンに含めることができます。
cppLiteral
: '//$CPP_IN$'( ~('//$CPP_OUT$') )*'//$CPP_OUT$'
;
この結果を得るには:
cppLiteral = '//$CPP_IN$\n txt1 txt2\n //$CPP_OUT$'