2
下面是一個Flex程序的代碼片段Echo和拒絕FLEX
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
輸入:
abcd
輸出:
abcdabcabaxxaxxbxxcxxdxx
有人能解釋如何得到這個輸出?
下面是一個Flex程序的代碼片段Echo和拒絕FLEX
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
輸入:
abcd
輸出:
abcdabcabaxxaxxbxxcxxdxx
有人能解釋如何得到這個輸出?
REJECT
有效地使flex
備份到下一個更好的匹配,在銘記的優先級規則flex
:
在你的情況,該字符串abcd
將匹配a
,ab
,abc
或abcd
;首選的是最長的一個(abcd
)。
由於您在REJECT
操作之前執行了ECHO
操作,因此即使匹配稍後會被拒絕,也會發生ECHO
。最後,flex
將回退到默認規則(它也匹配a
,但後來在源文件中),它將打印xxa
並接受該字符。現在,除了默認規則外,沒有任何內容匹配,所以接下來的三個字符每次匹配一個。
如果您將'\n'
寫入標準輸出,這可能會更清晰。
您是否想要標記此w/gnu-Flex或Lex?它似乎不是Adobe/Apache Flex的問題。 – JeffryHouser
這個程序是使用unix – sc1013
命令'flex ***。lex'和'gcc'編譯的,我繼續爲你重新標記它。適當的標記可以幫助你解答你的問題。 – JeffryHouser