特定の種類の文章のキーワードのみであるhello
のようなキーワードを持つ言語があります。他のタイプの文章では、これらの単語は、例えば、IDとして照合されるべきである。ANTLR4で通常のキーワードとしてキーワードを解析する方法
grammar Hello;
file : (sentence)* ;
sentence : 'hello' ID PERIOD
| INT ID PERIOD;
ID : [a-z]+ ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;
PERIOD : '.' ;
私はこの文章が有効になりたい::ここで物語スーパーシンプルな文法だ
hello fred.
31 cheeseburgers.
6 hello.
はなく、その最後の文は、この文法では動作しません。単語hello
は、タイプhello
のトークンであり、タイプID
ではありません。それはレクサーがすべてのhellosをつかんで、そのタイプのトークンに変えるようです。ここで
は私が欲しいものを説明するために、それを行うにはクレイジーな方法です:
sentence : 'hello' ID PERIOD
| INT crazyID PERIOD;
crazyID : ID | 'hello' ;
が、私の本当の言語で、ええ、そこに対処するためのハローのようなキーワードがたくさんあるので、そのように思えますクレイジー。
これを処理する、合理的でコンパクトなターゲット言語に依存しない方法がありますか?
ANTLRはこのシナリオを具体的にサポートしていますが、そうでなければ 'sentence:ID ID PERIOD'のようなことをして意味解析中に最初のIDが' hello'に等しいことを確認できませんでしたか? –
コメントありがとうございます。これは文法を書くことが簡単になりますが、私の全体的な仕事は、以下の答えよりも少し難しくなります。 – Stacky
心配しないで、私はGRosenbergがANTLRの居住者だと信じています。私は毎日何か他のものを使用しています。 –