2013-07-10 72 views
0

您好,ANTLR文法while循環

我需要解析while循環一個C語法。說,例如,我需要解析如下代碼:

A = 20 
B = 1 
WHILE(A < 30) 
//function call 
A = A + B 
ENDWHILE 

我需要分析和評估表達式。我已經遵循了一些步驟並寫了一個語法,但是這不會讓我產生期望的輸出。根據上面的代碼,在條件檢查之後,循環內的函數必須被調用10次。

首先,我在哈希表中存儲A和B的值(參考:ANTLR_HASH_TABLE結構)和同時規則看起來是這樣的:

whileStatement : 'WHILE' condExpr 'ENDWHILE' 
       ; 

我能夠存儲和獲取哈希表中的值,但我堅持要被調用/打印那麼多次的函數調用。我想知道應該遵循什麼步驟來調用/打印該次數的函數。

關於如何實現這一點的任何想法都會有很大的幫助。

回答

-1

對於while循環,您可以在ANTLR4中使用謂詞。

對於您發佈的示例,您可以在while循環中執行以下操作:(JAVA目標語言)。

grammar SO; 

sampleRule 
locals [int A, int B] 
: 
IDENTIFIER1 '=' INTEGER {$A = Integer.parseInt($INTEGER.text);} 
IDENTIFIER2 '=' INTEGER {$B = Integer.parseInt($INTEGER.text);} 
(
{$A < 30;}? 
IDENTIFIER1 '=' IDENTIFIER1 '+' IDENTIFIER2 
{$A = $A + $B;} 
)* 
; 

IDENTIFIER1 
: 'A' 
; 

IDENTIFIER2 
: 'B' 
; 

INTEGER 
: [0-9]* 
; 

該語法僅限於您提供的特定示例,但不應太難以使用上述語法進行擴展。

+0

嗨rishab,上面的語法在輸入文件中接受任何數量的這樣的循環。但是,while循環需要解析直到條件失敗,這意味着我應該再次調用while規則。這個怎麼做?如果我是正確的,我應該實現遞歸下降解析方法嗎? –