bisonc++的多态继承
bisonc++ inheritance with polymorphic
我正在尝试从野牛语法构造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
被标记为响应ExprASTNode
类型的EXPR
,这是IntASTNode
的基类,标记为INT
。我猜bison正在从标记中获取类型,并在进行任何强制转换之前检查标记。我有什么办法能解决这个问题吗?
如果将赋值替换为:
operator:
...
| INTEGER
{
$$(ast::expression::IntASTNode(std::stoi(d_scanner.matched())));
}
则bisonc++
在$$
的语义值和$$(expr)
的语义值之间生成一个static_cast
。
相关文章:
- 继承/多态性 - 我是否被迫使用"protected"变量?
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 具有 3 级继承的基类shared_ptr的多态性
- C 中的多态性.在基类上调用继承的方法
- 模板、继承和多态性 C++
- 了解C++中的继承和多态性
- 继承多态性功能调用
- C++接口、继承、多态性
- Sean Parent:对于继承层次结构中的多态类型,具有可变对象是极端的例外
- 如何在保持多态性的同时,将成员函数添加到需要它的继承类中,而不会影响其他同级类?
- 在C++中使用多态性相对于继承的实际优势
- 如果该类不是继承的,它会变成多态的吗
- 收到未定义的引用错误 c++ 继承/多态性
- C++多重继承多态性
- 虚拟继承/多态性
- 多级继承/多态性和虚函数
- 寻找继承/多态性替代方案的任何理由
- 继承/多态性-调用子类的方法
- 如何找出变量的类型,包括继承/多态性
- 多重继承/多态作业