我正在学习如何编写解析器,为此,我正在为 SQL 编写解析器。
我正在写的语法是由 perl Parse::Eyapp模块处理的,它与标准的 yacc 非常相似。
当我添加对单操作数运算符的支持(不确定什么是正确的名称 - 运算符,如 12! 或 @@ 'value')时,将语法编译为 perl 时,我得到:
14 shift/reduce conflicts
我之前也有过,但我通过添加适当的 %left 和 %right 解决了这个问题,但这次我不知所措,因为问题似乎来自 1 操作数运算符和更传统的 2 操作数运算符之间的冲突。
完整的语法太长了,放在这里,所以我只是链接到它。
要编译它,我使用命令:
eyapp -m Pg::SQL::Parser::SQL -o SQL.pm SQL.eyp
在启用详细信息的情况下运行eyapp ...
时,我得到了这个输出。
所以,问题是:如何解决这里的问题?