我想要实现的是一种Xtext语法,它能够区分int
和float
类型的否定数字。
当我遇到与eclipse community相同的术语问题时,我遵循他们的建议,将两者都写成数据类型规则:
SignedInteger returns ecore::EIntegerObject:
'-'? INT;
SignedFloat returns ecore::EFloatObject:
'-'? INT* '.' INT+;
但是上面会给我以下错误(最后我通过前导减号有同样的问题):
Decision can match input such as "RULE_INT" using multiple alternatives: 1, 2
要解决这个问题,我可以将它们都写成终端规则,但语法将会冲突:
The following token definitions can never be matched because prior tokens
match the same input: RULE_INT
因为两个规则都隐藏在Xtext common terminals规则INT
。
似乎解决其中一个问题会导致与另一个问题发生冲突。有什么建议如何解决这个问题?
除了引用ecore数据类型的另一个问题:你会推荐什么样的返回类型,那么EInt和EIntegerObject之间的区别是什么? (第二个是原始类型的包装类吗?)
答案 0 :(得分:1)
我通过removing with
公共终端声明解决了问题。并将其余的(没有INT规则)复制到我自己的语法中。所以不再有冲突了。
但我想这不是问题的根源...... 如果有人能解释这里发生了什么,我会非常感激。 (我希望这种方式不会带来以后的问题)