如何在Yacc(Linux Bison)中显式指定EOF?

How to explicitly specify EOF in Yacc (Linux Bison)?

提问人:czg 提问时间:6/22/2023 更新时间:6/22/2023 访问量:23

问:

我在 Linux 上使用 lex (flex) 和 yacc (bison) 构建了一个 SQL 解析器,这个解析器必须用 ';' 结束,它像这样正确解析 SQL:select * from table_a;

但是当我输入以下不正确的 SQL 时,它仍然有效:select * from table_a; where

不知道yacc规则是否支持在输入末尾标记一个EOF,这样在遇到错误语法时可以及时报错。

谢谢。

野牛 YACC

评论

1赞 Colin James 6/22/2023
我相信您可以通过将顶级规则包装为 X' -> X EOF 来避免此流结束问题,其中 EOF 是您在解析器中定义的令牌,并使用 flex 中的 <<EOF>> 规则生成。

答: 暂无答案