GOLD解析器创建者和终端

时间:2013-08-06 12:07:22

标签: context-free-grammar gold-parser

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

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

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

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

但是,现在符号' - '被定义两次,一次由<Expression>的第二个生成规则中的隐含(!)定义的符号定义,一次作为终结符(由Opers定义)。

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

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

1 个答案:

答案 0 :(得分:0)

错误是因为-< EXPRESSION>与运算符冲突,将负值放入这样的值:

< value> ::= int|'-'< value>