JavaCCでイプシロンを定義するにはどうすればよいですか?? 私は何かをしようとしています
< EPSILON: "">
しかし、うまくいきません。
JavaCCでイプシロンを定義するにはどうすればよいですか?? 私は何かをしようとしています
< EPSILON: "">
しかし、うまくいきません。
トークンマネージャが、空の文字列が一致した状態に戻る前に少なくとも1文字が消費される字句状態に切り替わる場合、空の文字列と一致するようにトークンを定義できます。それで:
TOKEN : {
< EMPTY : "" >
: MATCH_NON_EMPTY // change state, or infinite matches of the empty string could result
}
<MATCH_NON_EMPTY>
TOKEN : {
< NON_EMPTY : ~[] >
}
void Start() : { } {
<EMPTY> <NON_EMPTY>
}
これは、1文字の入力があれば問題なく機能します。
ただし、注意点があります。の一致は空の文字列の一致よりも「長い」と見なされるようです。そのため、一致するときに字句アクションマジックEOF
がないと、空の文字列を直前に一致させることはできません。EOF
EOF
空の単語イプシロンを使用する方法も探していたので、次のアプローチを思いつきました。
次のような空のプロダクション ルールを単純に使用しました。
void Empty () : { } { System.out.prntln("epsilon"); }
うまくいくことを願っています-少なくとも今のところはそうです...
補遺:
それはかなりうまく動作します:)