首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态bisonc++遗传

多态bisonc++遗传
EN

Stack Overflow用户
提问于 2016-11-16 14:11:06
回答 1查看 272关注 0票数 4

我试着用野牛语法来构造AST。Bison正确地生成解析器,但是当我试图用一些数学操作解析一个示例代码时,其打印的错误如下:

代码语言:javascript
复制
[Fatal] calling `.get<Tag__::EXPR>()', but Tag INT is encountered.

调试后,我注意到问题出现在expr非终端中,其产品如下:

代码语言:javascript
复制
expr:
      ...
    | operator
      {
         $$ = $1;
      }

operator本身有以下产品:

代码语言:javascript
复制
operator:
   ...
| INTEGER
  {
    $$ = new ast::expression::IntASTNode(std::stoi(d_scanner.matched()));
  }

我使用多态语义类型,exproperator使用响应ExprASTNode类型的EXPR标记,后者是带有标记INTIntASTNode的基类。我猜野牛正在从标签中获取类型,并在进行任何转换之前检查标记。我能解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 15:38:52

如果您用以下内容替换该任务:

代码语言:javascript
复制
operator:
     ...
        | INTEGER
          {
            $$(ast::expression::IntASTNode(std::stoi(d_scanner.matched())));
          }

然后bisonc++$$的语义值和$$(expr)的语义值之间做了一个static_cast

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40634291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档