我正在尝试编写一个表达式求值器,我试图在其中添加下划线_作为保留字,表示某个常量值。
这是我的语法,它成功解析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编译器生成器。
答案 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