在rply中解析IF和IF-ELSE语句

时间:2019-04-02 14:10:19

标签: python parsing

我想用Python制作一种语言来训练我。但是,在某些情况下,我在解析时会出错。我使用RPLY来做到这一点。

我做了这个语法:

    @self.pg.production('if_statement : IF expression OPEN_CRO NEWLINE statementlist NEWLINE CLOSE_CRO')
        def ifexp(p):
            return If(p[1], p[4])

        @self.pg.production('if_statement : IF expression NEWLINE OPEN_CRO NEWLINE statementlist NEWLINE CLOSE_CRO')
        def ifexp2(p):
            return If(p[1], p[5])

        @self.pg.production('else_statement : ELSE OPEN_CRO NEWLINE statementlist NEWLINE CLOSE_CRO')
        def elseexp(p):
            return Else(p[3])

        @self.pg.production('else_statement : ELSE NEWLINE OPEN_CRO NEWLINE statementlist NEWLINE CLOSE_CRO')
        def elseexp3(p):
            return Else(p[4])

        @self.pg.production('ifelse_statement : if_statement else_statement')
        def ifelse(p):
            return IfElse(p[0], p[1])

        @self.pg.production('ifelse_statement : if_statement NEWLINE else_statement')
        def ifelse2(p):
            return IfElse(p[0], p[2])

但是如果我输入以下代码:

a = enter("Votre age : ")
a = int(a)
if a >= 18
{
    show("Vous etes majeur")
}

show(a)

我在上一次“演出”时出错。

PS:如果我删除了有关ifelse_statement的规则,那是可行的(但是我不能使用if-else条件。)

谢谢(如果您需要其他代码,请询问它)

0 个答案:

没有答案