Xtext:使用具有交叉引用的语法谓词

时间:2016-09-05 09:36:02

标签: grammar predicate xtext cross-reference

我无法理解如何使用句法谓词。

我的语法是:

Rule:
    'terminalOne' (name=ID ':')?
    (field='terminalTwo' | myReference=[Something])? (anotherField=RuleTwo TOK_SEMI);

产生非LL(*)冲突。

我试图把' =>'在前面:

(anotherField=RuleTwo TOK_SEMI)

但它似乎没有帮助。

如何用句法谓词解决它?

感谢。

1 个答案:

答案 0 :(得分:0)

我做了一些缩短(左派分解的方式看起来很不寻常

user> (defmacro redefine [old new & body]
        `(let [v# ~old]
           (def ~old ~new)
           (let [res# (do ~@body)]
             (def ~old v#)
             res#)))
#'user/redefine

user> (redefine
       + -
       (+ 1 2 3))
-4

user> (+ 1 2 3)
6

user> #'+
#'user/+

user> (redefine
       + *
       (+ 1 2 4))
8

user> (redefine
       + *
       (+ 1 2 4))
8

user> (+ 1 2 4)
7