首页 > 解决方案 > 野牛中的可选参数

问题描述

标签: parsingbison

解决方案


您的原始代码相当于:

  NEXT variable { $$ = $1; }
| NEXT {
      statement_t *new = mkstatement(NEXT);
      if (strlen($2) > 0) {
          new->parms.next = $2;
      }
      $$ = new;
  }

--每条规则都有自己的行动;在为同一个非终端定义的规则之间,它们不会以任何方式“共享” |。如果你想在两个动作之间分解公共代码,你应该把它写成一个函数,并使每个动作只是对你的函数的调用。


推荐阅读