2015-12-07 106 views
0

我試圖做一個解析器,可以處理如果其他語句。目前,我有下面的代碼爲我bison.y文件:野牛/ Flex如果語句

ifstate: IF_TOKEN LPARENT compare RPARENT statement ENDIF_TOKEN 
    | IF_TOKEN LPARENT compare RPARENT statement else 
; 

else: ELSE_TOKEN statement ENDIF_TOKEN 
    | ELSEIF_TOKEN LPARENT compare RPARENT statement ENDIF_TOKEN 
    | ELSEIF_TOKEN LPARENT compare RPARENT statement else 
; 

在這裏,我已經比較返回一個字符串,它是真的還是假的。並且陳述是任何陳述(從添加到更多陳述的陳述)。但是,我不知道如何才能做到這一點,如果是真的。

+2

你的主要問題是接近的,以無法回答的,因爲缺乏上下文。比較將在運行時執行,除非條件不變並且您有可以檢測到的代碼。你如何生成任何代碼?沒有跡象表明,所以我們無法幫助您解決如何以不同的方式生成代碼。 ISTR認爲這樣的陳述代碼生成適度混亂 - 在聲明中的操作完成之後確定將解釋器發送到哪裏的操作非常繁瑣,因爲您還不知道ENDIF將在哪裏等。可以這樣做,雖然。 –

回答

0

if聲明編譯爲形式的僞代碼:

; set up the condition 
    TEST 
    BRANCH FALSE $1 
    ; body of 'if' statement 
$1: ; next statement 

if/else聲明:

; set up the condition 
    TEST 
    BRANCH FALSE $1 
    ; body of 'if' statement 
    BRANCH $2 
$1: ; // body of 'else' statement 
$2: ; next statement