2012-05-04 30 views
3

有什么方法可以使用Flex将令牌放回到输入流中?我想象yyunlex()一些功能。如何使用Flex(快速词法分析器)unlex?

+0

这是一个Adobe Flex的相关问题,或者它应该被标记瓦特/ GNU-FLEX?这个问题是如此缺乏细节,我不知道。 – JeffryHouser

+0

将标签从flex更改为gnu-flex。前者是指Adobe Flex框架,后者是指快速词法分析器。 – Kizaru

+0

@Kizaru谢谢 – saadtaame

回答

2

您有几个选项。

您可以使用unput(ch)将令牌的每个字符放回到输入流中,其中ch是字符。该调用将ch作为输入流中的下一个字符(下一个要在扫描中考虑的字符)。所以如果在令牌匹配期间保存字符串,你可以这样做。

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

现在,如果您要在扫描/解析过程中经常这样做,您可能希望仅使用lex来构建令牌并将令牌放置到您自己的数据结构中进行解析。这与野牛和yacc生成的yyparse()函数的作用类似。

3

有宏REJECT这将把令牌回流,并继续匹配其他规则,就好像第一次匹配没有。如果你只是想把一些char返回给流@ Kizaru的答案就足够了。

例片段:

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