负数的Xtext语法:终端与数据类型规则

时间:2014-01-07 13:27:47

标签: eclipse grammar xtext

我想要实现的是一种Xtext语法,它能够区分intfloat类型的否定数字。

当我遇到与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之间的区别是什么? (第二个是原始类型的包装类吗?)

1 个答案:

答案 0 :(得分:1)

我通过removing with公共终端声明解决了问题。并将其余的(没有INT规则)复制到我自己的语法中。所以不再有冲突了。

但我想这不是问题的根源...... 如果有人能解释这里发生了什么,我会非常感激。 (我希望这种方式不会带来以后的问题)