1
我有一個表達式ANTLR3擴大令牌選擇運營商
num_addition
: num_multi ((plus^|minus^) num_multi)*
;
我想令牌「加」和「減」更改爲不同的令牌所以我試圖使這個重寫規則。
num_addition
: num_multi (plus num_multi)* -> ^(num_multi ^(plus_special num_multi)*)
| num_multi (minus num_multi)* -> ^(num_multi ^(minus_special num_multi)*)
;
如果我這樣做,ANTLRWORKS中的世代似乎需要更長的時間,但它會生成正確的語法和令牌。如果我將這種風格應用於其他規則,例如「多重」,「分割」和「均等」等,它最終會達到ANTLRWORKS在按「生成」時不會執行任何操作的程度。
根據ANTLRWORKS沒有錯誤,但是當我生成什麼都沒有發生。
我錯誤地改寫了我想達到的目標嗎?
我希望你也可以插入正常令牌(PLUS,而不是PLUS_SPECIAL)。但是對於任意製作你是對的。 –
@MikeLischke,是的,只要它們在生產環境中匹配,就可以插入普通標記(或生產中的AST):不能在要創建AST的生產內插入不匹配的普通標記。我將重新解釋我的答案。 –
偉大的答案。正是我在找什麼!語法生成,但肯定會變慢。 – meriley