2

JavaCCでイプシロンを定義するにはどうすればよいですか?? 私は何かをしようとしています

< EPSILON: "">

しかし、うまくいきません。

4

2 に答える 2

1

トークンマネージャが、空の文字列が一致した状態に戻る前に少なくとも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がないと、空の文字列を直前に一致させることはできません。EOFEOF

于 2012-11-08T22:32:10.380 に答える
1

空の単語イプシロンを使用する方法も探していたので、次のアプローチを思いつきました。

次のような空のプロダクション ルールを単純に使用しました。

void Empty () : { } { System.out.prntln("epsilon"); }

うまくいくことを願っています-少なくとも今のところはそうです...

補遺:

それはかなりうまく動作します:)

于 2014-05-26T20:54:50.857 に答える