Как изменить код с помощью комбинаторов синтаксического анализатора Scala для учета приоритета операторов?

Рассмотрим эту часть грамматики:

  def expression = SimpleExpression ~ opt(relation ~ SimpleExpression)
  def relation = "=" | "#" | "<=" | "<" | ">=" | ">" | "IN" | "IS"
  def SimpleExpression = opt("+" | "-") ~ rep1sep (term, AddOperator)
  def AddOperator = "+" | "-" | "OR"
  def term = factor ~ rep(MulOperator ~ factor)
  def MulOperator = "*" | "/" | "DIV" | "MOD" | "&"
  def factor: Parser[Any] = number | "(" ~ expression ~ ")" | "~" ~ factor

Нужно ли переписывать ее части для создания новых правил, или есть просто метод (например, | vs. ||| для первого и самого длинного сопоставления правил) Сейчас мне не хватает того, что делает необходимое?

8
задан soc 3 July 2011 в 10:43
поделиться