我有一个相对简单的lex/flex文件,并且已经用flex的调试标志运行它,以确保它正确地进行标记。不幸的是,我总是遇到以下两个问题之一 - 或者flex产生的程序停止在几个令牌之后静静地放弃,或者我用来识别字符和字符串的规则未被调用,并且默认规则被调用。lex(flex)生成的程序不解析整个输入
有人能指出我正确的方向吗?我附上了我的flex文件和示例输入/输出。
编辑:我发现生成的词法分析器在特定的规则之后停止:“cdr”。这更详细,但也更令人困惑。我发布了一个简短的修改过的lex文件。
/* lex file*/
%option noyywrap
%option nodefault
%{
enum tokens{
CDR,
CHARACTER,
SET
};
%}
%%
"cdr" { return CDR; }
"set" { return SET; }
[ \t\r\n] /*Nothing*/
[a-zA-Z0-9\\[email protected]#$%^&*()\-_+=~`:;"'?<>,\.] { return CHARACTER; }
%%
样品输入:
--(end of buffer or a NUL)
--accepting rule at line 16 ("set")
--accepting rule at line 18 (" ")
--accepting rule at line 19 ("c")
--accepting rule at line 18 (" ")
--accepting rule at line 15 ("cdr")
任何想法:
set c cdra + cdr b +() ;
从通过生成的解析器运行输入输出完成?生成的程序在输入一半后放弃! (作为参考,我通过将文件内容重定向到生成的程序来进行输入)。
固定不匹配的方括号中,但没有运气。但是,我确实设法用一套较短的规则来重复这个问题。 – Zxaos 2010-02-14 15:47:09
要回答lex如何反应,它只会失败规则并停止。由于方括号永远不匹配,所以从不声明有效的规则。 (9 *只会对9进行操作,并且不会太伤害程序) – Stegosaurus 2016-05-23 04:10:10