2015-12-07 104 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