【问题标题】:Exponent operator does not work when no space added? Whats wrong with my grammar不加空格时指数运算符不起作用?我的语法有什么问题
【发布时间】:2015-08-04 18:31:22
【问题描述】:

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

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

【问题讨论】:

  • 除了Formula 制作之后的一段缺失时间,我认为这是一个错字,我没有看到任何明显的问题。 _ * 5 输入出现什么错误?
  • @500-InternalServerError 发布了更新
  • 去掉letteridentifier 定义(目前未引用)是否有效? - 我认为您的letter 定义可能会导致问题,因为它包含“Z”(大写)和“a”(小写)之间的字符。
  • @500-InternalServerError 是的,它有效。请发表你的答案,我会接受的。我将编辑我的问题以突出真正的问题

标签: parsing ebnf cocor


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • Coco/r 无法处理左递归。
    猜你喜欢
    • 2016-02-16
    • 2021-06-25
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2011-07-13
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多