parser

Antlr(DSL)

柔情痞子 提交于 2020-03-02 08:32:13
Antlr Name:ANother Tool for language for Language Recognition Site: https://github.com/antlr/ https://theantlrguy.atlassian.net/wiki/display/ANTLR3/ANTLR+v3+documentation http://www.antlr3.org/grammar/list.html http://www.crifan.com/files/doc/docbook/antlr_tutorial/release/pdf/antlr_tutorial.pdf 作用:生成某种语言的Lexer, Parser, Tree Walker or Lexer&Parser的combinor 用例: Hibernate解析HQL Spring解析 EL Gemfire(or Geode)解析OQL 版本:3.3(3.3实际上是用2.7依据Antlr.g grammar文件生成的parser) (由这个parser来解析我们的grammar 文件,然后由它的另一个library StringTemplate 来生成我们的parser 或者lexer) 输入:特定语言A的文法文件 (.g文件) 输出:特定语言A的解析程序(可以是Java C# C++ 等等) 文法文件

Jsoup代码解读之四-parser(上)

走远了吗. 提交于 2019-12-12 21:02:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性。这部分也是Jsoup最复杂的部分,需要一些数据结构、状态机乃至编译器的知识。好在HTML语法不复杂,解析只是到DOM树为止,所以作为编译器入门倒是挺合适的。这一块不要指望囫囵吞枣,我们还是泡一杯咖啡,细细品味其中的奥妙吧。 基础知识 编译器 将计算机语言转化为另一种计算机语言(通常是更底层的语言,例如机器码、汇编、或者JVM字节码)的过程就叫做编译(compile)。编译器(Compiler)是计算机科学的一个重要领域,已经有很多年历史了,而最近各种通用语言层出不穷,加上跨语言编译的兴起、DSL概念的流行,都让编译器变成了一个很时髦的东西。 编译器领域相关有三本公认的经典书籍,龙书 《Compilers: Principles, Techniques, and Tools 》 ,虎书 《Modern Compiler Implementation in X (X表示各种语言)》 ,鲸书 《Advanced Compiler Design and Implementation》 。其中龙书是编译理论方面公认的不二之选,而后面两本则对实践更有指导意义。另外 @装配脑袋 有个很好的编译器入门系列博客: http://www

Jsoup代码解读之六-parser(下)

风流意气都作罢 提交于 2019-12-12 21:02:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近生活上有点忙,女儿老是半夜不睡,精神状态也不是很好。工作上的事情也谈不上顺心,有很多想法但是没有几个被认可,有些事情也不是说代码写得好就行的。算了,还是端正态度,毕竟资历尚浅,我还是继续我的。 读Jsoup源码并非无聊,目的其实是为了将webmagic做的更好一点,毕竟parser也是爬虫的重要组成部分之一。读了代码后,收获也不少,对HTML的知识也更进一步了。 DOM树产生过程 这里单独将 TreeBuilder 部分抽出来叫做语法分析过程可能稍微不妥,其实就是根据Token生成DOM树的过程,不过我还是沿用这个编译器里的称呼了。 TreeBuilder 同样是一个facade对象,真正进行语法解析的是以下一段代码: <!-- lang: java --> protected void runParser() { while (true) { Token token = tokeniser.read(); process(token); if (token.type == Token.TokenType.EOF) break; } } TreeBuilder 有两个子类, HtmlTreeBuilder 和 XmlTreeBuilder 。 XmlTreeBuilder 自然是构建XML树的类

Jsoup代码解读之五-parser(中)

那年仲夏 提交于 2019-12-12 20:28:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇文章讲到了状态机和词法分析的基本知识,这一节我们来分析Jsoup是如何进行词法分析的。 代码结构 先介绍以下parser包里的主要类: Parser Jsoup parser的入口facade,封装了常用的parse静态方法。可以设置 maxErrors ,用于收集错误记录,默认是0,即不收集。与之相关的类有 ParseError , ParseErrorList 。基于这个功能,我写了一个 PageErrorChecker 来对页面做语法检查,并输出语法错误。 Token 保存单个的词法分析结果。Token是一个抽象类,它的实现有 Doctype , StartTag , EndTag , Comment , Character , EOF 6种,对应6种词法类型。 Tokeniser 保存词法分析过程的状态及结果。比较重要的两个字段是 state 和 emitPending ,前者保存状态,后者保存输出。其次还有 tagPending / doctypePending / commentPending ,保存还没有填充完整的Token。 CharacterReader 对读取字符的逻辑的封装,用于Tokenize时候的字符输入。CharacterReader包含了类似NIO里ByteBuffer的

EasyUI基础入门之Parser(解析器)

ε祈祈猫儿з 提交于 2019-11-29 09:43:06
前言 JQuery EasyUI提供的组件包括功能强大的DataGrid,TreeGrid、面板、下拉组合等。用户可以组合使用这些组件,也可以单独使用其中一个。(使用的形式是以插件的方式提供的) EasyUI体系结构 EasyUI所有的插件主要分为六大部分。Base基础、Layout布局、Menu&Button、Form表单、Window窗口等。从最基础的开始先掌握EasyUI基础部分。Base部分包含了八个基础插件分别为: parser(解析器) easyloader(加载器) draggable(拖动) droppable(放置) resizable(大小调整) pagination(分页) progressbar(进度条) searchbox(搜索框) 我们先从parser开始。 Parser(解析器) 解析器是easyui非常重要的基础组件,在easyui中我们能够简单的通过class定义一个组件,从而渲染出非常好的交互效果。就是通过parser进行解析的。parser会获取所有在指定范围内定义为easyui组件的class定义,并且根据后缀定义把当前节点解析渲染成特定的组件。 parser可以有两种使用方法: 1、$.parser.parse();不带参数,默认解析该页面中所有被定义为easyui组件的节点。 2、$.parser.parse('#cc')