在我的xtext dsl中我定义了以下规则:
Port returns tdg::Port:
'port'
'kind' kind=Kind
'type' type=Type;
enum Kind returns tdg::PortKind:
In='in' | Out='out';
enum Type returns tdg::PortType:
Numeric | String | Boolean | Tuple;
tdg课程来自ecore模型。 当我编译dsl语法时,我收到以下警告。我该如何避免它们?
警告(200): ../com.isax.testdatagen.dsl/src-gen/com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g:250:1: 决策可以匹配输入,例如''port''kind''''type''String'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl/src-gen/com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g:250:1: 决策可以匹配输入,例如''port''kind''''type''Boolean'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl/src-gen/com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g:250:1: 决策可以匹配输入,例如''type''kind''''type''Tuple'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl/src-gen/com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g:250:1: 决策可以匹配输入,例如''port''kind''''type''Numeric'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl.ui/src-gen/com/isax/testdatagen/ui/contentassist/antlr/internal/InternalTdgDSL.g:854:30: 决策可以匹配输入,例如''port''kind''''type''Numeric'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl.ui/src-gen/com/isax/testdatagen/ui/contentassist/antlr/internal/InternalTdgDSL.g:854:30: 决策可以匹配输入,例如''port''kind''''type''String'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl.ui/src-gen/com/isax/testdatagen/ui/contentassist/antlr/internal/InternalTdgDSL.g:854:30: 决策可以匹配输入,例如''port''kind''''type''Boolean'“ 使用多种替代方案:1,2结果,替代方案2是 禁用该输入警告(200): ../com.isax.testdatagen.dsl.ui/src-gen/com/isax/testdatagen/ui/contentassist/antlr/internal/InternalTdgDSL.g:854:30: 决策可以匹配输入,例如''type''kind''''type''Tuple'“ 使用多种替代方案:1,2结果,替代方案2是 已禁用该输入
答案 0 :(得分:1)
这种“多种替代”警告可能是由使用两种“路径”替代方案可达到的规则引起的,例如
Model:
Rule1a | Rule1b;
Rule1a:
Rule2 | Rule1b;
Rule1b:
{Rule1b} 'rule1b';
Rule2:
{Rule2} 'rule2';
在这里,rule1b
可以使用两条路径从规则“Model”到达:直接来自“Model”,间接来自“Rule1a”。
正如Christian所说,您的错误消息不可能由您列出的规则引起。如果你的语法除了这些之外只包含Model: ports+=Port*;
,那么你的语法可能会比你想象的还要多吗?
在任何情况下,要查找问题的原因,您必须确定具有不明确实例的规则:打开com.isax.testdatagen.dsl/src-gen/com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g
第250行(如日志中所示)并找出它所属的规则。在我的示例中,错误在于Antlr规则ruleModel
,它对应于Xtext规则Model
。