1

私は JavaCC の使い方を学ぼうとしていますが、JavaCC が正規表現をサポートしていることに気付きました。怠け者と呼んでくださいが、数字を定義するデフォルト/一般的な方法は少し長すぎると思いました:

TOKEN : { < #DIGITS : (["0" - "9"])+ >}

次のような短縮文字クラスを使用してみました。

TOKEN : { < #DIGITS : (\d)+ >}

しかし、「コンパイラコンパイラ」はそれを好まないようです。短縮形の字句エラーが発生します。この問題に関するドキュメントを見つけることができなかったので、何か間違ったことをしているのか、単にサポートされていないのかわかりません。javacc が短縮文字クラスでうまく機能しないという私の仮定を誰かが確認または否定できる場合は、非常に感謝しています。

4

1 に答える 1

1

サポートされていないというあなたの発見は正しいです。JavaCC の正規表現は、文字列リテラル、他の正規表現への参照、および事前定義された正規表現 < EOF > への参照のみで構成されます。

ただし、そこにあるコードで行っていることは、独自のショートカットを作成することです。番号記号は、シンボルがプライベートであること、つまり、正規表現内でのみ使用できることを意味します。したがって、それを TOKEN : { < #D : (["0" - "9"])+ > } として定義すると、他のトークン定義内で < D > を使用できることを意味します。

バイナリ ディストリビューションに含まれているサンプル文法 javacc.jj は公式の文法であるため、このファイルを調べると、この文法で解析可能な内容がわかります。出力は本質的に文法バリデーターのようです。

于 2012-07-02T12:06:28.343 に答える