-1

我为加法和减法创建了简单的语法:

S : EXPRESSION ENDLINE      {printf("Result: %d\n",$1);}    
  ;

EXPRESSION  
    : NUMBER '+' NUMBER     {$$ = $1 + $3;}           
    | NUMBER '-' NUMBER         {$$ = $1 - $3;}      
    ;

NUMBER : NUM            {$$ = $1;}
       ;

%%

到达 S 终端后,我想在打印第一个结果后编写新的输入。不幸的是,我在插入第二个公式后收到了语法错误。我怎样才能做到这一点?我将不胜感激。

4

1 回答 1

1

这与重置解析树无关;您需要扩展语法以允许包含表达式的任意数量的行。只需扩展规则S以包含递归调用,如下所示:

S : EXPRESSION ENDLINE      {printf("Result: %d\n",$1);}  
  | S EXPRESSION ENDLINE     {printf("Result: %d\n",$2);}
  ;

这可能有点俗气,所以你可以添加一条新规则来达到同样的效果:

S: RESULT
 | S RESULT
 ;

RESULT : EXPRESSION ENDLINE      {printf("Result: %d\n",$1);}
于 2015-12-08T21:32:10.633 回答