没有添加空格时,指数运算符不起作用?我的语法错误

时间:2015-08-04 18:31:22

标签: parsing ebnf cocor

我正在尝试编写一个表达式求值器,我试图在其中添加下划线_作为保留字,表示某个常量值。

这是我的语法,它成功解析5 ^ _,但无法解析_^ 5(没有空格)。它只对^运算符起作用。

COMPILER Formula
CHARACTERS
    digit = '0'..'9'.
    letter = 'A'..'z'.
TOKENS
    number = digit {digit}.
    identifier = letter {letter|digit}.
    self = '_'.
IGNORE '\r' + '\n'

PRODUCTIONS
    Formula = Term{ ( '+' | '-')    Term}.                                              

    Term = Factor {( '*' | "/" |'%' | '^'   ) Factor}.

    Factor = number | Self.

    Self = self.
END Formula.

我错过了什么?我正在使用Coco / R编译器生成器。

2 个答案:

答案 0 :(得分:1)

您对令牌letter的当前定义会导致此问题,因为范围A .. z包含_字符和^字符。

答案 1 :(得分:0)

您可以像这样重写公式和术语规则:

Formula = Formula ( '+' | '-') Term  | Term                                             

Term = Term ( '*' | "/" |'%' | '^'   ) Factor | Factor

e.g。 https://metacpan.org/pod/distribution/Marpa-R2/pod/Marpa_R2.pod#Synopsis