flexでは、正規表現の1つの一致に対して複数のトークンを返したいと思います。これを行う方法はありますか?
2992 次
3 に答える
0
すべての試合を意味しますか?正規表現関数または文字列関数を使用していますか?グローバルフラグを使用します。
フレックスに関しては、それはできないと思います。一度に1つのパターンとの一致をテストするため、おそらく範囲外です。なぜあなたはそれが欲しいのですか?最適化として?スコープの問題?
于 2009-02-22T09:26:29.507 に答える
-1
通常、これはスキャナーの上部にあるパーサーによって処理され、よりクリーンなコードが得られます。状態である程度エミュレートできます。
%option noyywrap
%top {
#define TOKEN_LEFT_PAREN 4711
#define TOKEN_RIGHT_PAREN 4712
#define TOKEN_NUMBER 4713
}
%x PAREN_STATE
%%
"(" BEGIN(PAREN_STATE); return TOKEN_LEFT_PAREN;
<PAREN_STATE>{
[0-9]+ return TOKEN_NUMBER;
")" BEGIN(INITIAL); return TOKEN_RIGHT_PAREN;
.|\n /* maybe signal syntax error here */
}
%%
int main (int argc, char *argv [])
{
int i;
while ((i = yylex ()))
printf ("%d\n", i);
return 0;
}
しかし、文法がより複雑になるとすぐに、これは非常に厄介になります。
于 2012-03-04T17:25:17.573 に答える