4
我想從一個野牛語法構建一個AST。野牛正確生成解析器,但是當我嘗試解析示例代碼一些數學運算以下錯誤的打印:bisonC++多態性遺傳
[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
作出響應類型witch是IntASTNode
的基類,標記INT
。我猜測野牛從標籤中獲取類型並在進行任何投射之前檢查標籤。有什麼辦法可以解決這個問題嗎?