避免Xtext多个替代警告



在我的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类来自一个核心模型。当我编译dsl语法时,我得到以下警告。我怎样才能避免它们呢?

警告(200):. ./com.isax.testdatagen.dsl/src-gen com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g: 250:1:决策可以匹配输入,如"'port' 'kind' 'in' type' 'String'"使用多个备选方案:1,2因此,备选方案2是禁用该输入警告(200):. ./com.isax.testdatagen.dsl/src-gen com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g: 250:1:决策可以匹配输入,如"port"kind"in"type"Boolean"使用多个备选方案:1,2因此,备选方案2是禁用该输入警告(200):. ./com.isax.testdatagen.dsl/src-gen com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g: 250:1:决策可以匹配输入,如"'port' 'kind' 'in' type' 'Tuple'"使用多个备选方案:1,2因此,备选方案2是禁用该输入警告(200):. ./com.isax.testdatagen.dsl/src-gen com/isax/testdatagen/parser/antlr/internal/InternalTdgDSL.g: 250:1:决策可以匹配输入,如"'port' 'kind' 'in' 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' 'in' 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' 'in' 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"in"type"Boolean"使用多个备选方案:1,2因此,备选方案2是禁用该输入警告(200):. ./com.isax.testdatagen.dsl.ui/src-gen com/isax/testdatagen/ui/contentassist/antlr/internal/InternalTdgDSL.g: 854:30:决策可以匹配输入,如"'port' 'kind' 'in' type' 'Tuple'"使用多个备选方案:1,2因此,备选方案2是禁用

这种"多选项"警告可能是由使用两个选项"路径"可到达的规则引起的,例如

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

相关内容

  • 没有找到相关文章