0

我正在尝试用 Treetop 编写一个简单的计算语法。为了简化这个问题的示例,我只使用变量、数字和+运算符。我希望能够写出这样的表达式:

  • A
  • 1
  • A+B
  • A+1
  • A+1+B

这是我的语法:

grammar Calculation

  rule expression
    (plus / number / variable)
  end

  rule plus
    expression "+" expression
  end

  rule number
    '-'? [0-9]+ ('.' [0-9]+)?
  end

  rule variable
    [A-Za-z0-9]+
  end
end

当我运行它时,它会无限递归。谷歌搜索了一段时间后,我认为我的问题与左递归有关,但我是解析器的新手,我不太明白这意味着什么。有人可以解释为什么我的特定示例不起作用以及如何解决它?

4

1 回答 1

0

为了避免左递归,您可以将expression规则分成如下两部分:

grammar Calculation

  rule expression
    plus / symbol
  end

  rule symbol
     number / variable
   end

  rule plus
    symbol "+" expression
  end

  rule number
    '-'? [0-9]+ ('.' [0-9]+)?
  end

  rule variable
    [A-Za-z0-9]+
  end
end
于 2019-12-02T14:37:28.057 回答