ステートメントが EOL で区切られている言語を解析したいと考えています。私はレクサー文法でこれを試しました(ドキュメントの例からコピーされました):
EOL : ('\r'? '\n')+ ; // any number of consecutive linefeeds counts as a single EOL
そして、これをパーサー文法で使用しました:
stmt_sequence : (stmt EOL)* ;
パーサーは、ステートメントが 1 つ以上の空白行で区切られているコードを拒否しました。
しかし、これは成功しました:
EOL : '\r'? '\n' ;
stmt_sequence : (stmt EOL+)* ;
私はANTLR初心者です。どちらも機能するはずです。貪欲/非貪欲なレクサースキャンについて理解できないことはありますか?
これを 3.2 と 3.4 の両方で試しました。OS X 10.6の Eclipse Indigo でANTLR IDE を実行しています。
ありがとう。