有没有办法使用Flex将令牌放回输入流?我想象一些函数,如yyunlex()
。
答案 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()
函数所做的事情。