学习Lex&Yacc做语法分析也有两个月了,最近准备把自己辛苦攒写的代码移植到Javacc上。所以准备尽量每天都腾出点儿时间,把之前学的知识进行整理和巩固。同样也利于以后与别人分享。
最后选择Javacc做语法分析而放弃使用Yacc,是基于以下几点考虑的:
1、Yacc只支持LL(1)算法,而Javac支持LL(k)算法。
2、Yacc基于C编写,且它自动生成的.c文件可读性很差,当程序达到一定上千行代码以后,要查找里面错误很麻烦,无法用gdb调试程序准确定位。
3、Yacc的内存分配依赖于C,在实际过程中导致的内存段错误很难跟踪。
4、虽然C的效率更高,但Java更稳定,且移植性更高,支持类库很多,在对数据库操作和XML等操作的情况下,Java显得更容易快速开发。(在我的解析程序中,需要让解析程序读取配置文件和写数据库操作)
5、个人原因,目前当然自己对Java比C更熟悉。
综上所述,我最后将选择Javacc做语法解析,去解析SQL,将SQL中的元素提取出来做数据仓库中的ETL自动MAPPING。
那么在《Lex&Yacc》的日志中,我将记录下学习flex&Yacc的从入门到熟悉的一个过程。虽然该过程是事后总结,但我还是希望自己能够使用例子进行一步一步的讲解,能对后学者有一点点的帮助。
(注:flex是lex的一个分支版本,Flex - Fast LEXical analyzer generator.(GNU version of lex))
日志大致分为以下部分:(有不合理的地方会临时调整)
1、环境准备与参考资料
2、第一个flex的例子
3、第一个yacc的例子
4、第一个flex&yacc结合的例子
5、一个简单的计算器
6、冲突管理
7、一个简单的SQL解析器
8、提取SQL中的元素及Yacc的内存分配
9、解析程序如何与C++结合
10、解析程序如何与Java结合
分享到:
相关推荐
lex词法分析器&yacc语法分析器,值的你花时间去看去学的一本书
lex&yacc语言解析
简单介绍unix下的工具lex 和 yacc的语法与应用,很不错的资料
lex&yacc 教程
Lex Yacc 第二版 英文版, 经典的lex与Yacc学习资料,虽然是扫描版本但代码部分非常清晰(先前我找到的中文版本代码部分根本看不清楚)
在windows下可以使用的lex&yacc编译器,使用超级方便
Lex & Yacc 2ed
很多人都知道lex&yacc,特别是计算机科班毕业的。因为在unix上自带的bshell就有这些功能。 cygwin里面也有这些。 可是,这种基本的功能,在win32平台下,微软似乎忘了。 有个外国人写了个软件Parser Generator (bum...
从lex&yacc说到编译器
东南大学计算机系编译实验 lex&&yacc
在VC下建立Lex&Yacc编译环境的步骤和软件包
编译原理 lex & yacc qq
lex&yacc书上的历程,较为简单,对于初学者比较有帮助
lex和yacc是进行编译原理实验的常用工具,提供一份lex和yacc的资料。
该文档主要讲解了如何用lex和yacc组建一个编译器。并描述了如何做一个复杂的计算器。 This document explains how to construct a compiler using lex and yacc. Lex and yacc are tools used to generate lexical ...
相当简洁的Lex&Yacc入门教程。
lex & yacc 简明指南(英文原版)
_从lex&yacc说到编译器.rar _从lex&yacc说到编译器.rar
LEX & YACC TUTORIAL by Tom Niemann 编译原理里的 解释器 编译器相关。
A Compact Guide to Lex & Yacc 的源代码