【问题标题】:no error while parsing empty file yacc/lex解析空文件 yacc/lex 时没有错误
【发布时间】:2012-06-15 08:36:18
【问题描述】:

我有一个从 yacc/lex 生成的解析器。除了一种情况外,我设置的所有规则都可以正常工作。

如果此解析器正在解析的文件为空,则会出错。我想添加规则,以便在文件为空时不会出错。我没有在任何一个 .l/.y 文件中添加任何检查。

如何使用 YACC/LEX 来做到这一点?

提前致谢!!

【问题讨论】:

    标签: parsing bison yacc lex


    【解决方案1】:

    词法分析器应该识别输入的结尾并相应地返回一个标记(即EOF)。

    您的语法的开始规则可能如下所示:

    %start program
    
    ...
    
    program : EOF 
            | instructions EOF
            ;
    

    正如 Ira Baxter 指出的那样,一个简单的“空”规则也足够了。 GNU bison manual 提供了一个例子:

    input   : /* empty */
            | input line
            ;
    

    【讨论】:

    • 正如你所建议的,我试图在 lexer 中识别 EOF,我通过 . { if(yytext[0]==EOF){ return tk_eof; } } 对此进行了修正,但通过调试我知道这个检查永远不会是真的我在这里做错了吗?
    • 我认为你最好使用End-Of-File rule
    • 他为什么不能简单地写:“程序: |指令”?
    • @LinusKleen 谢谢!!您上一条评论中的链接很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多