1
我一直在爲Z語言(ISO UTF版本)開發antlr4語法,規範要求lex階段,然後進行「2階段」解析。 您首先將它放入一堆NAME(或DECORWORD)標記中,然後根據spec的解析器語法中的operatorTemplate規則解析結果標記,替換適當的標記,最後解析新修改的標記流以獲取AST 。ANTLR4中的動態運算符優先級和關聯性?
我有上面的工作,但我不知道如何動態地設置解析器規則的優先級和關聯性,所以解析樹是錯誤的。
操作語法如下(數字優先):
-generic 5 rightassoc (_ → _)
-function 65 rightassoc (_ ◁ _)
我看不出有任何的API來設置規則的相關性,所以我嘗試用語義斷言,這樣的:
expression:
: {ZSupport.isLeftAssociative()}? expression I expression
| <assoc=right> expression i expression
;
或
expression:
: {ZSupport.isLeftAssociative()}? expression i expression
| <assoc=right> {ZSupport.isRightAssociative()}? expression I expression
;
但後來我得到「的規則下集是相互左重草書[表達]「
可以這樣做嗎?
請參閱TDAR的第70頁關於如何在ANTLR中指定關聯性的討論。 – GRosenberg