有没有办法使用 Flex 将令牌放回输入流?我想像一些功能yyunlex()
。
问问题
956 次
2 回答
3
有一个宏REJECT
会将令牌放回流中并继续匹配其他规则,就好像第一个匹配没有一样。如果您只想将一些字符放回流@Kizaru's answer就足够了。
示例片段:
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
于 2012-06-04T21:28:51.523 回答
2
你有几个选择。
unput(ch)
您可以使用其中 ch 是字符将令牌的每个字符放回输入流中。此调用将 ch 作为输入流上的下一个字符(扫描中要考虑的下一个字符)。因此,如果您在令牌匹配期间保存字符串,则可以执行此操作。
您可能想查看yyless(0)
哪个会将令牌中的所有字符也放回输入流中。不过我从来没有用过这个,所以我不确定是否有任何问题。您可以指定一个整数n
,将除前 n 个字符之外的所有字符放回输入流。
现在,如果您要在扫描/解析期间经常这样做,您可能只想使用 lex 来构建标记并将标记放置到您自己的数据结构中进行解析。这类似于 bison 和 yacc 的生成yyparse()
函数所做的。
于 2012-05-04T14:48:35.617 回答