是否可以在Groovy中使用infix操作符創建dsl?groovy dsl - 是中綴運算符可能嗎?
我研究了構建器模式,invokeMethod,propertyInvoke和MetaClass,我只能看到如何使用它來使用前綴運算符(波蘭語符號)創建樹結構。我想要做的是構建具有綁定優先規則的中綴運算符的樹結構。
例如:如果這個僞代碼計算爲8:
add(2,multiply(3, 2))
我想它表示爲:
2 add 3 multiply 2
那裏乘結合不是添加更加緊密。我使用算術只是一個例子 - 我的應用程序是完全不同的。
我不想寫和支持我自己的解析器,所以我希望groovy有這樣的機制?
編輯:在搜索解決方案時,我發現這是可能的,並在Scala中有詳細記錄(請參閱第33章:由馬丁奧德斯基編寫的Scala編程中的組合解析器)。
它嚴格必須遵循'2乘加3 2'具有較高的優先級 「浮動」 向上的節點:
測試句法?它可以是「2.加3乘2」嗎? – Will
如果它是'2加3乘2減4',應該理解爲'add(2,subtract(multiply(3,2),4)'? – Will
是的 - 只是運算的正常順序。 – user1373164