美文网首页
antlr实践

antlr实践

作者: mugbya | 来源:发表于2017-10-09 16:50 被阅读150次

对于写一个自己的解析器这回事,我以前从来没有想过的,毕竟我学渣,而且还没学过编译原理。
但是没想到到新公司竟然这等美差还能落到我头上,真是要好好感谢下大佬们。

言归
郑传

虽然以前没有写过解析器,但是做过相关的事情。在以前的一家公司时曾经写过规则,就是那种业务开始复杂后,逻辑不好写死在程序中,需要根据业务改变,而动态配置规则。这个东西是在odoo下做的,用的它提供的asteval。

简而言之,就是用odoo 封装过得eval 来执行一段 python code 而返回结果。

而现在公司的业务需求是风控部门定义自己的风控规则,而我们去解析这些规则。 这个就跟以前是倒过来。这里之前没明白为什么不用python的解释器去解析这些规则,后面做实际做了过后才知道,这样更面向风控规则,且可以高于python之上。也就是说我们可以根据风控规则的形式,自定义一些规范,然后解析器去解析这些既定规范就好。感觉高端了很多。

比较

PLY(lexer/yacc) 是入门简单,但是实现一些东西有难度。比如实现一个if条件判断,需要多做一点事情。不然就会得到错误的结果。比如

 a=1; if("a") a=2 else a=4

最开始得到的结果是4,因为ply是自下向上解析,每个字符都会被执行到,然后你的逻辑需要单独写算法实现。

而antlr是入门困难,用起来很方便。我的比喻是ply像汇编语言,antlr是高级语言

安装(OS X)

要使用antlr,需要先准备 antlr 的编译环境。antlr 的规则是写好词法规则语法规则,然后用antlr去编译生成对应语言的应用,然后再去做相应的实现就行。

$ cd /usr/local/lib
$ curl -O http://www.antlr.org/download/antlr-4.7-complete.jar
$ export CLASSPATH=".:/usr/local/lib/antlr-4.7-complete.jar:$CLASSPATH"
$ alias antlr4='java -jar /usr/local/lib/antlr-4.7-complete.jar'
$ alias grun='java org.antlr.v4.gui.TestRig'

语言执行环境

这里我使用python 来实现antlr,所以我需要安装antlr 的pyhon执行环境

pip install antlr4-python3-runtime

or

pip install antlr4-python2-runtime

实现

异常/错误

词法异常

如果你故意写错一个词法,antlr 默认的 词法解析错误会报错,但是结果尽量去按照正确的结构去解析,所以结果还是正确的!

这种我们需要重写它的错误处理,解析错误就扔出异常。

语法异常

参考链接

相关文章

  • antlr实践

    引 对于写一个自己的解析器这回事,我以前从来没有想过的,毕竟我学渣,而且还没学过编译原理。但是没想到到新公司竟然这...

  • Antlr

    什么是 Antlr? ANTLR™ (ANother Tool for Language Recognition)...

  • Antlr4 入门

    Antlr是什么 ANTLR (ANother Tool for Language Recognition ) 是...

  • DSL从入门到放弃 - ANTLR之HelloWorld

    ANTLR是什么 ANTLR 即 ANother Tool for Language Recognition 框架...

  • ANTLR4实践笔记

    最近科研项目需要加入一些新东西,需要我构建一个程序信息库,然后就想设计一套类似sql的查询语言去查询库里包含的内容...

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

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

  • Antlr4解析MySQL语法使用方法

    从网上https://www.antlr.org/download.html[https://www.antlr....

  • ANTLR学习(三)

    ANTLR基本语法 前面已经简单介绍了ANTLR以及怎么安装和测试。同学们应该大概清楚ANTLR的使用场景,但是对...

  • Skywalking-07:OAL原理——解释器实现

    OAL 解释器实现 OAL 解释器是基于 Antlr4 实现的,我们先来了解下 Antlr4 Antlr4 基本介...

  • Antlr

    Antlr简介 ANTLR 语言识别的一个工具 (ANother Tool for Language Recogn...

网友评论

      本文标题:antlr实践

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