自分の言語から他の多くの(すべての)オブジェクト指向言語に翻訳者を作成します。言語の一部として、ターゲット言語コードセクションをファイルに挿入できるようにサポートしたいと考えています。これはAntlrがルール内のアクションをどのようにサポートしているかと実際は似ています。Antlrを使用してファイル内の非構造化セクションを解析する方法
だから私はセクションを持ってできるようにしたいが始まると、このような中括弧で終わる:
{ ...target lang code... }
問題は、それが{...}かなり可能であるということであるターゲット言語に表示することができますコードでは、カーリーのペアを一致させる必要があります。私が行うことができるようにしたいどのような
は、私は、独自の文法に引き込まれました。このフラグメントのようなものです:
grammar target_lang_block;
options
{
output = AST;
}
entry
: target_lang_block;
target_lang_block
: '{' target_lang_code* '}'
;
target_lang_code
: target_lang_block
| NO_CURLIES
;
WS
: (' ' | '\r' | '\t' | '\n')+ {$channel = HIDDEN;}
;
NO_CURLIES
: ~('{'|'}')+
;
この文法はそれ自体で動作します(少なくとも限り、私はそれをテストしています) 。
しかし、これらのルールをより大きな言語に入れると、NO_CURLIESはすべてを食べて、MismatchedTokenExceptionsを引き起こすようです。
私はこのような状況に対処する方法がわかりませんが、私がしたいのは、target_lang_blockにあるかどうかに基づいてNO_CURILESをオンとオフにすることができるように思われますが、 。
可能ですか?別の方法がありますか?
おかげ
もう一度Bart!パーサー/レクサーの作成の微妙さを学ぶための本の推奨事項 – mtru1010
@ mtru1010、解析の理論に関する本の良いリストは[この前のQ&Aで](http://stackoverflow.com/questions/4922413/books-sites-on-parsing-theory)Stackoverflowで見つけることができます。 ANTLRを最大限に活用する方法に関する本は、間違いなくParrの[The Definitive ANTLR Reference](http://pragprog.com/book/tpantlr/the-definitive-antlr-reference)です。そして、あなたは大歓迎です! –