0

我正在尝试使用 GOLD 解析器构建器为脚本语言创建语法,因为我想要在 C# 中输出。但是,解析器显然希望终端是唯一的。但是,终端的含义可以是上下文相关的?!考虑符号“-”。两者-xx-y都是有效的,可以编写如下语法:

! -------------------------------------------------
! Terminals
! -------------------------------------------------
Opers = [+-*/]

! -------------------------------------------------
! Rules
! -------------------------------------------------

<Expression> ::= <Expression> <Operator> <Expression>
               | '-' <Expression>
               | <Value>
<Operator>   ::= Opers

然而,现在符号“-”被定义了两次,一次是由第二个生产规则中隐含的 (!) 定义的符号,<Expression>一次是终端(由 Opers 定义)。

最重要的是,字符串也可以包含 - 符号,添加 '-' 的第三个定义!?你如何规避这一点?我在 GOLD 的文档或网络上的任何地方都没有看到任何关于此的信息。我认为有一些我不知道的与 Parser 构建器合作的主要方式。

如果这是一个基于表的解析器无法解决的问题,我有什么替代方案,因为我想要 C# 输出?

4

1 回答 1

0

错误是因为-< EXPRESSION>与运算符冲突,将减号放入值中,如下所示:

< value> ::= int|'-'< value>
于 2014-02-21T20:07:19.357 回答