【发布时间】:2012-06-15 08:36:18
【问题描述】:
我有一个从 yacc/lex 生成的解析器。除了一种情况外,我设置的所有规则都可以正常工作。
如果此解析器正在解析的文件为空,则会出错。我想添加规则,以便在文件为空时不会出错。我没有在任何一个 .l/.y 文件中添加任何检查。
如何使用 YACC/LEX 来做到这一点?
提前致谢!!
【问题讨论】:
我有一个从 yacc/lex 生成的解析器。除了一种情况外,我设置的所有规则都可以正常工作。
如果此解析器正在解析的文件为空,则会出错。我想添加规则,以便在文件为空时不会出错。我没有在任何一个 .l/.y 文件中添加任何检查。
如何使用 YACC/LEX 来做到这一点?
提前致谢!!
【问题讨论】:
词法分析器应该识别输入的结尾并相应地返回一个标记(即EOF)。
您的语法的开始规则可能如下所示:
%start program
...
program : EOF
| instructions EOF
;
正如 Ira Baxter 指出的那样,一个简单的“空”规则也足够了。 GNU bison manual 提供了一个例子:
input : /* empty */
| input line
;
【讨论】:
. { if(yytext[0]==EOF){ return tk_eof; } } 对此进行了修正,但通过调试我知道这个检查永远不会是真的我在这里做错了吗?