编译原理
timesir
授人以鱼,不若授人以渔
展开
-
ANTLR教程(一)简介
目录1. antlr参考资料2. antlr环境搭建3. antlr4的优点4. antlr语法分析流程antlr参考资料The Definitive ANTLR 4 Reference.pdf基本概念 · ANTLR 4简明教程antlr环境搭建intellij java编程环境下的antlr编程环境安装intellij java编程环境 官网下载开发版安装java sdk原创 2017-10-05 14:36:50 · 2190 阅读 · 0 评论 -
ANTLR教程(二)词法分析
目录1. 匹配大小写字符组成的单词2. 产生式中语法规则中关键字也用到了单词,与词法规则冲突,谁先匹配3. 匹配数字4. 匹配带引号的字符串5. 匹配到字符串后丢掉,不要送给语法分析器6. 划分词法分析器和语法分析器的界限本节讲解antlr词法分析的功能。 匹配大小写字符组成的单词ID : [a-zA-Z]+ ; */ match 1-or-more upper or lowercas原创 2017-10-05 14:49:10 · 3380 阅读 · 0 评论 -
ANTLR教程(三)语法分析
目录1. 文法产生式1.1. 基于四种模式实现文法产生式1.1.1. 顺序模式1.1.2. 选择模式1.1.3. 记号依赖1.1.4. 递归模式1.2. 消除产生式歧义1.2.1. 定义符号结合性1.2.2. 定义符号优先级1.3. antlr 实际语言例子1.3.1. csv 主要顺序模式1.3.2. json 主要递归模式2. 使用antlr显示语法树方法3. 使用antlr原创 2017-10-05 15:00:20 · 6611 阅读 · 1 评论 -
ANTLR教程(四)语法树遍历机制
目录1. 方法一: 使用antlr定义的语法树遍历顺序——listener1.1. 类的继承关系1.2. 需要与antlr遍历类ParseTreeWalker一起使用1.3. 对同一非终结符的不同产生式进行标记1.3.1. 不标记的话实现起来复杂1.3.2. 解决方法: 标记产生式1.4. 特点1.5. 例子2. 方法二: 程序员需要自定义语法树遍历顺序——visit2.1. 类的继承原创 2017-10-05 15:11:27 · 13849 阅读 · 4 评论 -
ANTLR教程(五)语法树节点间数据传递
目录1. 方法一: 使用程序员自定义的栈,适用于listener和visit等2. 方法二: 使用antlr语法树节点返回值,只适用于visit,lister函数没有返回值3. 方法三: 将值存入语法树种的节点上下文中,适用于listener,visit3.1. 方法一:节点上下文有个value字段,只能存放整型3.2. 方法二:最容易的方式是使用map,可以存放任意类型方法一: 使用程序员原创 2017-10-05 15:16:37 · 1667 阅读 · 0 评论 -
bision教程
目录1. lex与yacc比较2. bison语法(分为三部分)2.1. 三部分通过%%分割2.2. 第一部分:声明和选项设置(编译后复制到生成的yac.tab.c中)2.3. 第二部分:文法匹配后进行某种动作(生成yylex()函数到lex.yy.c中)2.3.1. 基础语法2.3.2. 文法表达式2.3.2.1. bision一条规则有两类符号构成: 非终结符和终结符2.3.2.2.原创 2017-10-05 16:14:20 · 3480 阅读 · 0 评论 -
flex教程
目录1. lex/yacc简介1.1. lex/yacc与flex/bison的关系1.2. lex/yacc的优势1.3. 程序例子下载地址1.4. 学习资料2. flex语法(分为三部分)2.1. 三部分通过%%分割2.2. 第一部分:声明和选项设置(直接复制到生成的lex.yy.c中)2.3. 第二部分:单词匹配后进行某种动作(核心部分语法分析器,生成yylex()函数到lex.原创 2017-10-05 15:41:07 · 2831 阅读 · 1 评论