在 flex 中,我想为一个正则表达式的匹配返回多个标记。有没有办法做到这一点?
问问题
2992 次
3 回答
3
我一直这样做的方式是创建一个待返回令牌的队列,并在开始时yylex()
检查令牌并返回它们。
于 2009-03-30T16:16:20.593 回答
0
你的意思是所有的比赛?您使用的是正则表达式函数还是字符串函数?使用全局标志。
至于 flex,我认为你做不到。您一次测试一个模式的匹配项,因此这可能超出了范围。你为什么要那个?作为优化?范围问题?
于 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 回答