我在寫一個支持任意布爾表達式的語法。語法用來表示一個程序,稍後通過靜態分析工具。靜態分析工具有一定的侷限性,所以我想申請以下重寫規則:ANTLR重寫規則中的替代
嚴格的不平等近似用小量:
expression_a != expression_b -> expression_a > expression_b || expression_a < expression_b
:
expression_a > expression_b -> expression_a >= expression_b + EPSILON
不平等正在使用「或」語句近似
使用ANTLR有沒有簡單的方法來實現它?目前我的語法如下:
comparison : expression ('=='^|'<='^|'>='^|'!='^|'>'^|'<'^) expression;
我不知道如何應用不同的重寫規則,這取決於操作符是什麼。根據上面定義的規則,如果運算符是(「==」,「< =」或「> =」),並且要遞歸地轉換它,我希望樹保持原樣。
非常感謝!不知道你可以在一個語句中使用多個重寫規則。 (順便說一下,你如何生成這些圖表?ANTLRWorks?) –
@cheshire,不客氣。是的,AST圖像來自ANTLRWorks的調試器(不是解釋器!)。你也可以通過代碼生成它們,看看這個問答:http://stackoverflow.com/questions/2856612/visualizing-an-ast-created-with-antlr-in-a-net-environment –