2013-10-12 48 views
0

我有以下的語法規則:行動,以規則的多個實例或令牌

pacman 
    : section section map section 
    ; 

我想寫這個規則不同的方式處理三種不同section個Java的動作。三種不同實例的句柄是什麼?


這是僞代碼顯示我想要什麼:

pacman 
    : section section map section 
    { 
    processFirstSection($section[0]); 
    if(checkSecondSection($section[1])) 
    { 
     //The if statement isn't important itself; 
     //the point is that I do completely different 
     //things with each section 
     handleThirdSection($section[2]); 
    } 
    } 
    ; 
+0

這取決於你的意思是「不同地處理它們」。如果你的意思是不同的解析器規則必須被應用,ANTLR通過嘗試它們來指出你的想法。如果這是你*無法通過解析器規則處理的事情,那麼考慮使用一個監聽器並在之後對解析樹進行驗證/操作。 – Darien

回答

0
pacman 
    : section1=section section2=section map section3=section 
    { 
    processFirstSection($section1); 
    if(checkSecondSection($section2)) 
    { 
     handleThirdSection($section3); 
    } 
    } 

在一般情況下,規則

rule : name=Token otherName=rule 

允許您訪問令牌Token使用使用$name和規則rule$otherName

+1

這適用於Antlr3。如果您使用的是Antlr4,那麼您會爲規則使用類似的語法(section1 = section section2 = section ...),但您不會有任何操作。通過監聽器的上下文將會有名爲section1,section2和section3的字段。 –

相關問題