我正在尝试用野牛语法构建一个AST。 Bison正确生成解析器但是当我尝试用一些数学运算解析一个示例代码时,打印出以下错误:
expr
调试后我注意到问题出在expr:
...
| operator
{
$$ = $1;
}
非终端,产生了以下内容:
operator
operator:
...
| INTEGER
{
$$ = new ast::expression::IntASTNode(std::stoi(d_scanner.matched()));
}
本身就有以下产品:
expr
我正在使用多态语义类型,operator
和EXPR
标记为ExprASTNode
,它们响应IntASTNode
类型,是INT
的基类使用标记{{1}}。我猜测野牛是从标签中获取类型并在进行任何演员之前检查标签。有什么方法可以解决这个问题吗?