3

我有以下简单的语法:

grammar MyGrammar
  rule comparison_operator
    '=' / '>' <ComparisonOperator>
  end
end

当我解析字符串>时,它成功返回:

ComparisonOperator

当我解析字符串=时,它返回时没有语法错误,但不将匹配的字符串与ComparisonOperator实例相关联,而仅与

Treetop::Runtime::SyntaxNode

如果我颠倒语法中字符的顺序......

grammar MyGrammar
  rule comparison_operator
    '>' / '=' <ComparisonOperator>
  end
end

那么它可以正常工作,=但不能正常工作>

如果我将每个符号与ComparisonOperator

grammar MyGrammar
  rule comparison_operator
    '>' <ComparisonOperator> / '=' <ComparisonOperator>
  end
end

那么它对两者都适用,但我觉得这不是很直观。如果一个人有很多符号替代品,它会变得很麻烦。

有没有办法以ComparisonOperator更简单的方式将所有替代方案关联起来?

更新: 我在此处添加了一个新的 Github 存储库,其中包含演示此问题的所有代码:https ://github.com/pmatsinopoulos/treetop_tutorial

4

1 回答 1

0

只需在替代项周围加上括号,因此 ComparisonOperator 适用于:

grammar MyGrammar
  rule comparison_operator
    ('>' / '=') <ComparisonOperator>
  end
end

括号创建了一个包含替代项的序列,并且类与该序列相关联。

于 2016-01-20T10:07:31.490 回答