bisonc++ 多态继承

bisonc++ inheritance with polymorphic

我正在尝试从野牛语法构建 AST。 Bison 正确生成了解析器,但是当我尝试使用一些数学运算解析示例代码时,打印出以下错误:

[Fatal] calling `.get<Tag__::EXPR>()', but Tag INT is encountered.

调试后我注意到问题出在 expr 非终端中,生成如下:

expr:
      ...
    | operator
      {
         $$ = ;
      }

operator本身有以下产生式:

operator:
   ...
| INTEGER
  {
    $$ = new ast::expression::IntASTNode(std::stoi(d_scanner.matched()));
  }

我正在使用多态语义类型,exproperator 带有响应 ExprASTNode 类型的 EXPR 标记 是基础 class 对于 IntASTNode 和标签 INT。我猜野牛正在从标签中获取类型并在进行任何转换之前检查标签。有什么办法可以解决这个问题吗?

如果你用这个代替赋值:

operator:
     ...
        | INTEGER
          {
            $$(ast::expression::IntASTNode(std::stoi(d_scanner.matched())));
          }

然后 bisonc++$$ 的语义值和来自 $$(expr) 的语义值之间创建一个 static_castbisonc++ manual.

中的更多信息