Bison/Flex If语句

Bison/Flex If语句,bison,flex-lexer,Bison,Flex Lexer,我正在尝试制作一个能够处理if-else语句的解析器。我的bison.y文件当前有以下代码: 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

我正在尝试制作一个能够处理if-else语句的解析器。我的bison.y文件当前有以下代码:

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
;

这里我比较了返回的字符串是true还是false。and语句是任何语句(从添加到赋值到更多if语句)。但是,我不知道如何仅在if为真时执行语句。

一个
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

由于缺乏背景,你的主要问题几乎无法回答。比较将在运行时执行,除非条件是常量,并且您有代码可以检测到它。你是如何生成代码的?没有任何指示,因此我们无法帮助您以不同的方式生成代码来处理此问题。ISTR指出,为这些语句生成代码有点混乱——在语句中的操作完成后,如果您还不知道ENDIF将在哪里,那么就可以巧妙地确定将解释器发送到哪里,等等。不过,这是可以做到的。