美文网首页
Hive源码系列(六)编译模块之词法、语法解析 (上)

Hive源码系列(六)编译模块之词法、语法解析 (上)

作者: 小萝卜算子 | 来源:发表于2019-06-12 19:28 被阅读0次

词法、语法解析模块会先介绍一下antlr环境(上)。然后举实际案例说明怎么使用antlr工具、利用antlr生成的Lexer、Parser、TreeParser代码,获取asttree。这些都是hive获取asttree的过程,理解了这些,再理解hive的asttree就很容易了(中)。 最后 详细介绍hive词法、语法解析的源码 以及hive AstTree的使用 (下)

1、什么是词法分析、什么是语法分析

这一块该怎么说呢?

通常我们在沟通的时候,都会说一段话来表达自己的观点。而我们说的这些话,是由若干有逻辑联系的句子组成。句子是有若干词语构成的,就像一层一层的洋葱。词语或者叫单词就是那些无法再拆分的最小的具有概念意义的单位。词语是由字母有序组成的,但字母不具备概念意义。以单词为分界线,单词之上的,组成结构的元素都是具有概念意义的。单词以下,组成结构的元素都是没有概念意义的。

举个例子,现在有一句话:

we eat apples

我们可以看到,这句话中有三个单词组成 we,eat,apples。每个单词又由字母有序排列组成。we,eat,apples 这三个单词是具有实际意义的,而组成这些单词的字母w,e;e,a,t;a,p,p,l,e,s 本身是没有实际含义的,只有有序组成we,eat,apples 这些单词的时候,才赋予了具体的概念意义。

词法分析: 一门研究无意义的字母如何组成有意义的单词的技术

那语法分析又是什么呢?

以上是主+谓+宾结构的一句话,语法顺序为主语—谓语—宾语的结构,we为主词(主语,由名词或者代词组成),eat为动词(谓语由动词组成),apples为名词(宾语由名词或者代词组成)。

那我们规定的这种标准的主谓宾格式,就是所谓的语法

语法分析: 一门研究有意义的单词如何组成更复杂意义的句子的技术。

ps:

可以这么简单理解hive中的词法、语法解析

sql是由若干个单词组成

hive中的词法分析,就是分析sql里每个单词该怎么组成,

hive中的语法分析,就是研究这些单词该以怎样的结构组成一个sql的

2、antlr工作流程

hive借助Antlr定义SQL的词法规则和语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree。HiveSql后续的编译过程全都基于AST Tree,所以我们想要完整理解hive sql的编译过程,需要前置了解一下antlr是怎么工作的

词法分析器(Lexer):词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),供语法分析器使用。

语法分析器(Parser):语法分析器将把收到的Tokens组织起来,并转换成语法规则定义的所允许的结构。

树分析器(TreeParser):树分析器可以用于对语法分析生成的抽象语法树进行遍历,并能执行一些相关的操作。

总结一下,使用antlr需要我们提前定义好识别字符流的词法规则和用于解释Token流的语法分析规则。然后,antlr会根据我们提供的语法文件自动生成相应的词法/语法分析器。我们可以利用他们将输入的文本进行编译,并转换成抽象的语法树Ast Tree。

2、antlr环境准备

antlr是编译原理领域比较著名的工具了,这次借助研究hive的机会,安装使用一下antlr。

2.1 安装antlr的集成调试工具antlrworks

下载antlrworks-1.5.1.jar

官网:https://www.antlr.org/download.html

点击ANTLR v3,进入https://www.antlr3.org/download.html

点击下载

2.2 为eclipse安装antlr插件

Help-->Install New SoftWare

输入antlrv3ide 的插件updaesuite 的地址: http://antlrv3ide.sourceforge.net/updates

全选,点Next 直到最后,安装成功

2.3 确认安装是否正确

antlrworks:

在命令行 start java -jar antlrworks-1.5.1.jar或者双击antlrworks-1.5.1.jar启动antlrworks

如果能打开,就没问题

eclipse:

打开Windown --> Preferences

可以看到上面插件就说明安装成功了

相关文章

  • Hive源码系列(六)编译模块之词法、语法解析 (上)

    词法、语法解析模块会先介绍一下antlr环境(上)。然后举实际案例说明怎么使用antlr工具、利用antlr生成的...

  • JS不知道的那些事

    编译语言源码执行之前三个步骤 分词/词法分析(拆分成词法单元) 解析/词法解析(逐级潜逃生成“抽象语法树”) 代码...

  • Hive源码学习——Driver

    HiveQL解析流程: 1.Hive根据Antlr定义的词法、语法规则完成词法、语法分析将HQL解析为AST Tr...

  • Java常见面试题汇总-----------JVM专题(JVM编

    32、JVM编译器优化 32.1、JVM编译的过程   1、解析与填充符号表过程  1)、词法、语法分析  词法分...

  • 你不知道的JavaScript —— 作用域是什么

    1.1 编译原理 传统编译步骤 分词/词法分析(拆分成一个个词法单元)——>解析/语法分析(词法单元流转化为抽象语...

  • swift编译浅析

    1. 编译器介绍 swift的编译器是swiftc 1.1 编译历程 SwiftCode源码->通过词法分析、语法...

  • JavaScript的运行机制

    编译 (解析) 对于传统编译型语言(例如:Java)来说,编译步骤分为:词法分析->语法分析->语义检查->代码优...

  • 第一章作用域是什么

    1.1 编译原理 编译语言 分词/词法分析 解析/语法分析 代码生成 对于Javascript来说,大部分情况发生...

  • 2018-01-04

    你不知道的js上篇 作用域是什么编译三步走分词/词法分析解析/语法分析,将词法转换成程序语法树(抽象语法树,Abs...

  • JVM-JMM-并发 杂记

    虚拟机 编译 早期编译(优化)解析与填充符号表过程词法分析-->Token序列语法分析-->抽象语法树填充符号表注...

网友评论

      本文标题:Hive源码系列(六)编译模块之词法、语法解析 (上)

      本文链接:https://www.haomeiwen.com/subject/gderfctx.html