我正在尝试从野牛语法构造一个 AST。Bison 正确生成解析器,但是当我尝试使用一些数学运算解析示例代码时,会打印以下错误:
[Fatal] calling `.get<Tag__::EXPR>()', but Tag INT is encountered.
调试后,我注意到问题出在expr
非终端,具有以下产品:
expr:
...
| operator
{
$$ = $1;
}
并operator
具有以下生产本身:
operator:
...
| INTEGER
{
$$ = new ast::expression::IntASTNode(std::stoi(d_scanner.matched()));
}
我正在使用多态语义类型,expr
并被operator
标记为EXPR
响应ExprASTNode
类型,女巫是IntASTNode
带有 tag的基类INT
。我猜野牛正在从标签中获取类型并在进行任何演员之前检查标签。有什么办法可以解决这个问题吗?