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