未添加 space 时,指数运算符不起作用?我的语法有什么问题

Exponent operator does not work when no space added? Whats wrong with my grammar

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

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

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 编译器生成器。

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

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

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

例如https://metacpan.org/pod/distribution/Marpa-R2/pod/Marpa_R2.pod#Synopsis

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