到这里词法分析模块就接近尾声了, 下面对词法分析模块进行总结 : 递归下降本质上也算是自顶向下的分析算法, 适合手工编码, 它相对来说更加灵活, 能够对于特定的DSL进行更加灵活的处理优化, 但是相对来说比较慢.而自动生成器则恰好相反, 接下来是一个LR(1)语法生成器的实例 -- YACC. 首先 ...
分类:
其他好文 时间:
2016-05-27 18:19:03
阅读次数:
181
github 项目地址
草木瓜
准备工作
文法分析用Flex(Lex):将数据分隔成一个个的标记token (标示符identifiers,关键字keywords,数字numbers, 中括号brackets, 大括号braces, 等等etc.)
语法分析用Bison(Yacc): 在分析标记的时候生成抽象语法树. Bison 将会做掉几乎所有的这些工作, 我们定义好我们的...
分类:
其他好文 时间:
2016-05-23 15:09:32
阅读次数:
387
修改后的实际应用全代码 草木瓜(七) 精读 源代码有百度云存盘
复杂的逻辑判断简化成程序判断语句,可便于应用的扩展和维护,也极大增强了代码的可读性。
我们对整体文件划分如下:
tree.l
tree.y
parser.h #内部编译使用的头文件
parser.c #内部编译的主函数
compile.h #内外部交互的头文件
main.c #外部程序
修改说...
分类:
其他好文 时间:
2016-05-23 15:07:36
阅读次数:
273
boa服务器make错误 boa服务器make错误 boa服务器make错误 编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用L ...
分类:
其他好文 时间:
2016-05-13 10:08:09
阅读次数:
169
简介本章依然专注于使用yacc实现计算器,主要的特点是给算术运算增加变量支持。模块拆分它主要分为3个模块
1. lex词法分析器
2. yacc语法分析器
3. 符号表功能描述1. lex词法分析器正规式的定义如下:delim [ \t]
ws {delim}+
letter [a-zA-Z]
digit [0-9]
id {letter}({letter}|{digit})*
/...
分类:
其他好文 时间:
2016-05-07 09:52:10
阅读次数:
252
lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。软件需求:
系统 win7-64位(win7-32, win8, win10全部通过)
c++编译器: vs2010(2008,2013,2015也全部通过)
lex和yacc编译器: ParGen.exe基本流程:
安装Pargen.exe,采用的默认目录安装在C:\Program...
分类:
其他好文 时间:
2016-05-07 09:38:56
阅读次数:
405
语法树打印 草木鱼(六) 源代码有百度云存盘
node.h 中有是否打印内容栈的开关
treeinput
treeinput
if(1>1||2>2)print(1);
else
if(3>1&&2>2)print(2);
else
print(3);
和 再识语法树 中的文件放一起
bison -d lexya_e.y
lex lexya_e.l...
分类:
其他好文 时间:
2016-05-07 08:36:37
阅读次数:
318
修改后的实际应用全代码 草木鱼(七) 精读 源代码有百度云存盘
复杂的逻辑判断简化成程序判断语句,可便于应用的扩展和维护,也极大增强了代码的可读性。
我们对整体文件划分如下:
tree.l
tree.y
parser.h #内部编译使用的头文件
parser.c #内部编译的主函数
compile.h #内外部交互的头文件
ma...
分类:
其他好文 时间:
2016-05-07 08:36:26
阅读次数:
244
语法树的应用 草木鱼 (四) 源码见百度云盘
详细讲解:草木鱼(四)
input
input
i=0;
while(i<=10){
print(i);
i=i+1;
}
print(i+i);node.h
node.h
/* 定义树结点的权举类型 */
typedef enum { TYPE_CONTENT, TYPE_INDEX, TYPE_OP }...
分类:
其他好文 时间:
2016-05-07 08:33:15
阅读次数:
235
1.定义命令包
如果Makefile中出现一些相同命令序列,可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以“define”开始,以“endef”结束,如:
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef
这里,“run-yacc”是这个命令包的名字,其不要和Makefile中...
分类:
其他好文 时间:
2016-04-29 16:39:32
阅读次数:
172