如何使用Flex(快速词法分析器)进行unlex?

时间:2012-05-04 14:35:59

标签: flex-lexer lex lexical-analysis

有没有办法使用Flex将令牌放回输入流?我想象一些函数,如yyunlex()

2 个答案:

答案 0 :(得分:3)

REJECT会将令牌放回流中并继续匹配其他规则,就好像第一个匹配的那样。如果你只想把一些字符串放回流@ Kizaru的答案就足够了。

示例摘录:

%%
a     |
ab    |
abc   |
abcd  ECHO; REJECT;
.|\n  printf("xx%c", *yytext);
%%

答案 1 :(得分:2)

您有几个选择。

您可以使用unput(ch)将令牌的每个字符放回输入流,其中ch是字符。此调用将ch作为输入流上的下一个字符(扫描时要考虑的下一个字符)。因此,如果在令牌匹配期间保存字符串,则可以执行此操作。

您可能希望查看yyless(0),它会将令牌中的所有字符也放回输入流。我从来没用过这个,所以我不确定是否有任何问题。您可以指定一个整数n hwich将除了前n个字符之外的所有字符放回输入流。

现在,如果您在扫描/解析期间经常这样做,您可能希望使用lex来构建令牌并将令牌放在您自己的数据结构上进行解析。这类似于bison和yacc生成的yyparse()函数所做的事情。