1

javaccを使用して、入力ストリームの前にいくつかの新しい文字をプッシュできますか?

たとえば、パーサーが次の構文を解析するとします。

#define Paragraphs  "Paragraph+"
#define Volume "(Title,(Chapter,${Paragraphs})+)"

Book=${Volume}+;

パーサーを呼び出す前にスキャナーが前処理${Volume}する必要があることを javacc に伝えるにはどうすればよいですか?(Title,(Chapter,Paragraph+)+)

MOREステートメントを使用して達成できますか?

ありがとう

4

2 に答える 2

2

Token.imageは public フィールドなので、直接設定することもできます。以下は、私の JavaCC ブックのトークナイザーの章にある例です。

トークン: {
   {matchedToken.image = image.append("B").toString();}
}

この本のすべてのサンプル ソース コードは、ここからダウンロードできます。

于 2009-12-23T03:39:49.233 に答える
1

OK、解決策を見つけたと思います: いくつかの Java ステートメントをTOKENセクションに追加でき、現在のバッファは ' image 'という名前の StringBuilder で定義されます:

| <Y:"${"(<NAME)+ "}" >
        {
        String oldValue=image.toString();
        image.setLength(0);
        image.append(my_dict.get(oldValue));
        }
于 2009-12-22T15:39:04.970 に答える