Flex を使用してトークンを入力ストリームに戻す方法はありますか? のような機能を想像しますyyunlex()
。
質問する
956 次
2 に答える
3
REJECT
トークンをストリームに戻し、最初に一致したルールが一致しなかったかのように他のルールと一致し続けるマクロがあります。char をストリームに戻したい場合は、@Kizaru の回答で十分です。
スニペットの例:
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
于 2012-06-04T21:28:51.523 に答える
2
いくつかのオプションがあります。
unput(ch)
chが文字である場合、トークンの各文字を入力ストリームに戻すことができます。この呼び出しにより、chが入力ストリームの次の文字(スキャンで考慮される次の文字)になります。したがって、トークンの一致中に文字列を保存すると、これを行うことができます。
yyless(0)
トークンからのすべての文字を入力ストリームに戻す方法を調べたい場合もあります。でもこれは使ったことがないので、落とし穴があるかどうかわかりません。n
最初のn文字を除くすべてを入力ストリームに戻す整数を指定できます。
これをスキャン/解析中に頻繁に行う場合は、lexを使用してトークンを作成し、そのトークンを独自のデータ構造に配置して解析することをお勧めします。yyparse()
これは、bisonとyaccの生成された関数が行うことと似ています。
于 2012-05-04T14:48:35.617 に答える