2012-05-04 58 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); 
%% 
相關問題