FLEX:有没有办法一次返回多个令牌

问题描述 投票:7回答:3

在flex中,我想为正则表达式的一个匹配返回多个标记。有没有办法做到这一点?

regex flex-lexer lexical-analysis
3个回答
3
投票

我这样做的方法是创建一个待返回令牌的队列,并在yylex()的开头,检查令牌并返回它们。


0
投票

你的意思是所有的比赛?您使用的是正则表达式函数还是字符串函数?使用全局标志。

至于flex,我认为你不能那样做。您一次测试一个模式的匹配,以便可能超出范围。你为什么要这样?作为优化?范围问题?


-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;
}

但是一旦你的语法变得更加复杂,这将变得非常混乱。

© www.soinside.com 2019 - 2024. All rights reserved.