跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 spark sql parser 的源码, 看不懂,求指导
未分類
8 2 月 2020

关于 spark sql parser 的源码, 看不懂,求指导

关于 spark sql parser 的源码, 看不懂,求指导

資深大佬 : scalaer 25

 class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging {  ...      override def visitSingleStatement(ctx: SingleStatementContext): LogicalPlan = withOrigin(ctx) {            visit(ctx.statement).asInstanceOf[LogicalPlan]     }  } 

visit是 antlr 的AbstractParseTreeVisitor的一个方法, 返回类型是 T, 函数签名如下

public T visit(ParseTree tree) {     return tree.accept(this); } 

我的疑问是为什么可以将返回类型转成 LogicalPlan, 这个过程发生了啥??

大佬有話說 (7)

  • 資深大佬 : whwlsfb

    T 是泛型,可以代表任何类型

  • 資深大佬 : billlee

    因为 visit(ctx.statement) 会调用其它 visit… 方法并把返回值传上来。spark 实现的这些 visit… 逻辑保证了这个情况下返回值一定会是 LogicalPlan.

    这个 Visitor 要结合语法文件看的,建议读一读 The Definitive ANTLR 4 Reference, 跟着书用用 ANTLR 写个计算器什么的。

  • 資深大佬 : zoowii

    sql 语句被解析成语法树,一条 sql 语句对应的语法树中每个节点被 visitor 解析为一个算子,顶层被 visitor 解析为 LogicalPlan. visitSingleStatement 是 visitor 访问单独一条 SQL 语句的,顶层 visitor 结果肯定是 LogicalPlan 类型了

  • 資深大佬 : MarsBar

    最近刚好在写编译器的作业写到这个类似的
    重点: 访问者模式

  • 主 資深大佬 : scalaer

    @billlee 感谢

  • 主 資深大佬 : scalaer

    @zoowii 谢谢

  • 主 資深大佬 : scalaer

    @MarsBar 我最近打算重新学编译原理, 有机会能交流下就好了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具