当没有添加空间时,指数运算符不工作?我的语法有什么问题?



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

这是我的语法,它成功地解析了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编译器生成器。

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

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

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

。https://metacpan.org/pod/distribution/Marpa-R2/pod/Marpa_R2.pod简介

相关内容

  • 没有找到相关文章

最新更新