2012-05-04 6 views
3

Flexを使用してトークンを入力ストリームに戻す方法はありますか?私はyyunlex()のようないくつかの機能を想像しています。Flex(Fast Lexical Analyzer)を使用してアンレックスする方法は?

+0

は、このは、Adobe Flexの関連質問であるか、それは、GNU-フレックス/ wのタグ付けされなければなりませんか?問題は細部に欠けているので、私は分かりません。 – JeffryHouser

+0

タグをflexからgnu-flexに変更しました。前者はAdobe Flexフレームワークを指し、後者は高速語彙アナライザを指します。 – Kizaru

+0

@キザルありがとう – saadtaame

答えて

2

あなたはいくつかの選択肢があります。

unput(ch)を使用して、トークンの各文字を入力ストリームに戻すことができます。ここで、chは文字です。この呼び出しは、chを入力ストリームの次の文字(次の文字でスキャン対象とみなす)として置きます。だから、トークンマッチ中に文字列を保存すると、これを行うことができます。

yyless(0)を調べると、トークンのすべての文字を入力ストリームに戻すことができます。私はこの1つを使用したことはありませんでしたので、問題があるかどうかはわかりません。整数nを指定すると、最初のn文字以外のすべてを入力ストリームに戻すことができます。

これをスキャン/解析中に頻繁に行う場合は、lexを使ってトークンを作成し、トークンを独自のデータ構造に配置して解析することができます。これは、bisonとyaccが生成したyyparse()関数が行うことに似ています。

3

マクロREJECTがあります。トークンをストリームに戻し、最初に一致したものと同じように他のルールとの一致を続けます。 @ Kizaruの答えをストリームに戻すだけでいくつかのチャーを入れたいならば。

例は、スニペット:

%% 
a  | 
ab | 
abc | 
abcd ECHO; REJECT; 
.|\n printf("xx%c", *yytext); 
%% 
関連する問題