推荐一款优秀的语法解析工具—Antlr4

举报
数据湖爱好者 发表于 2021/05/08 11:35:12 2021/05/08
【摘要】 Antlr4是一款十分优秀的语法解析工具,由于其优秀的能力被用于HIive,Spark, Elasticsearch等大型的开源项目中。通过学习Antlr4的使用,我们可以构建自己的语法解析方法。

Antlr4是一款十分优秀的语法解析工具,由于其优秀的能力被用于HIive,Spark, Elasticsearch等大型的开源项目中。通过学习Antlr4的使用,我们可以构建自己的语法解析方法。
接下来我们看看Antlr4的基础入门
首先准备一个g4后缀的语法规则文件,内容如下:

            grammar Hello;               // 定义语法的名字
            prog  : 'hello' ID ;         // 匹配关键字hello,后面跟着一个标志符
            ID : [a-z]+ ;                // 匹配小写字母标志符
            WS : [ \t\r\n]+ -> skip ;    // 跳过空格、制表符、回车符和换行符

简单介绍一下:
grammar: 语法的名称,与文件名名称一直,如上文件名称为Hello.g4
Parser 规则:即语法分析规则,以小写字母开头的就是Parser 规则,上方的prog就是语法解析规则,名称可以自定义,当作变量名称可以更加方便的理解,可以看到prog的内容是 ‘hello’ 加上一个 ID的符号,ID是词法规则,prog这个语法规则会匹配到hello,然后将后续的部分交给词法,Antlr4的解析顺序是从上往下解析的,最上方的Parser规则为根语法规则。
Lexer 规则:即词法规则, 以大写字母开头的就是Lexer规则,词法规则可以放入Parser规则中,去匹配语法分析规则中的单词,例如上面的ID使用了正则规则[a-z]+,就可以匹配到所有的小写字符,WS匹配到了空格、制表符、回车符和换行符,并会将其跳过。Lexer 规则无论写在文件的哪个位置,都会被排在Parser 规则下面。
用以上的语法去解析’hello world’,则可以得到语法树
image.png
可以看出,语法解析器成功的匹配到了hello,而词法解析器ID也成功的匹配到了world这个单词。

同时语法解析器也可以通过别的语法解析器进行拼接,新增一个语法解析器,state为’prog+’,即一个或多个prog语法的解析。
image.png
输入’hello world hello antlr’,即可得到如下语法树
image.png

以上,就是Antlr4最基础的语法介绍,即Antlr的语法解析器和词法解析器的使用方法,后续会继续进一步讲解语法解析器和词法解析器的使用方法以及其他的一些语法规则。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。