在使用treetop定义语法节点时,如何将许多替代方法关联到同一个类?

时间:2016-01-19 12:29:34

标签: ruby treetop

我有以下简单的语法:

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

1 个答案:

答案 0 :(得分:0)

简单地在括号中加上括号,因此ComparisonOperator适用于:

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

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