我有一个相对简单的 lex/flex 文件,并且一直在使用 flex 的调试标志运行它,以确保它正确地标记化。不幸的是,我总是遇到两个问题之一 - 要么是 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\\!@#$%^&*()\-_+=~`:;"'?<>,\.] { return CHARACTER; }
%%
样本输入:
set c cdra + cdr b + () ;
通过生成的解析器运行输入的完整输出:
--(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")
有什么想法吗?生成的程序输入一半就放弃了!(作为参考,我通过将文件的内容重定向到生成的程序来进行输入)。