yacc中相似规则的匹配

yacc中相似规则的匹配,c,yacc,lex,C,Yacc,Lex,在yacc+lex程序中,使用yacc文件中的这些规则(以及更多规则) stmt : ';' | expr ';' { /*code*/ } | IF '(' expr ')' stmt { /*code*/ } | IF '(' expr ')' stmt ELSE stmt { /*code*/ } . . . . 如果输入类似于: if(1<2) {return 5;} if(1<2) {return 5;}

在yacc+lex程序中,使用yacc文件中的这些规则(以及更多规则)

stmt    : ';'
        | expr ';'      { /*code*/ }
        | IF '(' expr ')' stmt  { /*code*/ }
        | IF '(' expr ')' stmt ELSE stmt { /*code*/ }
.
.
.
.
如果输入类似于:

if(1<2) {return 5;}
if(1<2) {return 5;} else {return 2;}

if(1在yacc脚本中,if语句定义如下:

if_statement : IF  b_expr   
                   statement
               else_part
             ;

else_part    : ELSE
                statement
             | empty
             ;

expr
是如何定义的?@BobJarvis我刚刚添加了expr的定义
if_statement : IF  b_expr   
                   statement
               else_part
             ;

else_part    : ELSE
                statement
             | empty
             ;