【问题标题】:Decide which rule to match (alternative for semantic predicates in Xtext)确定要匹配的规则(Xtext 中语义谓词的替代方案)
【发布时间】:2015-08-15 03:28:51
【问题描述】:

在我的语法中,我有变量和对象(对象只是一个名称 (ID))。现在我希望一个变量可以是对另一个声明的变量或对象的引用。
所以我想解析以下输入:

var = 3;
var2 = var;
objVar = MyObject;

我是这样实现的:

Declaration:
    name = ID "=" Content ";"
;
    Content:
        INT
        | reference = [Declaration]
        | object = ID

但解析器无法区分简单 ID 和对声明的引用(因为名称也是 ID)。
有没有办法解决我的问题?
我尝试了语法谓词,但我也可以从我的规则中删除引用或对象,因为解析器只看到一个 ID 而不是一个引用。在 ANTLR 中,我会使用语义谓词,但据我所知,它们在 Xtext 中不存在。
有没有办法让解析器识别ID是否是引用,然后让它选择ID来匹配引用或对象?

问候 Krzmbrzl

【问题讨论】:

    标签: xtext xtend


    【解决方案1】:

    这在 Xtext 中是不可能的。您必须在引用属性 xor 对象属性之前或之后添加至少一个标记。我会建议某事。喜欢new

    Content:
        INT
        | reference=[Declaration]
        | 'new' object=ID
    ;
    

    现在,解析器可以决定一个 ID 是创建一个新对象还是对另一个声明的交叉引用。

    【讨论】:

    • 这真是个坏消息,因为我正在为现有语言实现这个 eclipse-plugin,因此我不能简单地添加一个令牌......
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2023-03-17
    • 2012-11-22
    相关资源
    最近更新 更多