我无法理解如何使用句法谓词。
我的语法是:
Rule:
'terminalOne' (name=ID ':')?
(field='terminalTwo' | myReference=[Something])? (anotherField=RuleTwo TOK_SEMI);
产生非LL(*)冲突。
我试图把' =>'在前面:
(anotherField=RuleTwo TOK_SEMI)
但它似乎没有帮助。
如何用句法谓词解决它?
感谢。
答案 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