
lex与Yacc
文章平均质量分 74
逆風的薔薇
这个作者很懒,什么都没留下…
展开
-
Lex与Yacc学习(一)之环境配置篇
Abstract在开发程序的过程中经常会遇到文本解析的问题,例如:解析 C 语言源程序,编写 脚本引擎等等,解决这种文本解析的方法有很多,一种方法就是自己手动用 C 或者 C++直接编写解析程序,这对于简单格式的文本信息来说,不会是什么问题,但是 对于稍微复杂一点的文本信息的解析来说,手工编写解析器将会是一件漫长痛苦 而容易出错的事情。本系列文档就是专门用来由浅入深的介绍两个有名的原创 2015-01-09 10:33:59 · 3437 阅读 · 0 评论 -
Lex与Yacc学习(七)之环境配置另一种方式
必备工具flex-2.5.4a-1.exe 和 bison-2.4.1-setup.exe 以及 cygwin2.738 的安装文件,下载地址 http://download.youkuaiyun.com/detail/fly_yr/8343573flex与bison安装运行flex-2.5.4a-1.exe 和 bison-2.4.1-setup.exe 文件安装至D:\Softw原创 2015-01-22 09:59:51 · 2463 阅读 · 0 评论 -
Lex与Yacc学习(九)之Yacc语法
Yacc语法本文讨论yacc语法的格式并描述可用的各种特征和选项yacc语法结构yacc语法包括三部分:定义段、规则段和用户子例程段...定义段...%%...规则段...%%...用户子例程段...各部分由以两个百分号开头的行分开,尽管某一个部分可以为空,但是前两部分是必须的,第三部分和前面的百分号可以省略。符号yacc 语法由符号组成,即语法的“词”原创 2015-01-22 11:32:24 · 3115 阅读 · 0 评论 -
Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行
词法分析程序ch3-01.l%{#include "ch3-01.tab.h"extern int yylval;%}%%[0-9]+ { yylval = atoi(yytext); return NUMBER; }[ \t] ; /* ignore white space */\n return 0; /* logical EOF */. return yytext[0原创 2015-01-22 09:36:44 · 4026 阅读 · 0 评论 -
Lex与Yacc学习(十)之Yacc库
Yacc库每个实现都需要有用的例程库,在UNIX系统中,可以通过cc命令行尾端给出-ly标志(或通过其他系统下的等价物)来包含库。库的内容在不同的实现之间是不同的,但总是包括main()和yyerror()main()yacc的所有版本都带有最小的主程序,该程序对于简短程序和测试有时是很有用的,它非常简单,如下所示:main(argc,argv){ yyparse原创 2015-01-22 15:31:13 · 7987 阅读 · 0 评论 -
Lex与Yacc学习(四)之Lex规范
Lex规范的结构lex程序由三部分组成:定义段、规则段和用户子例程序段...定义段...%%...规则段...%%...用户子例程序段...这些部分由以两个百分号组成的行分隔开。尽管某一部分可以为空,但前两部分是必须的,第三部分和前面的%%行可以忽略。定义段定义段包括文字块、定义、内部表声明、起始条件和转换。以空白开头的行被逐字拷贝到C文件中,通常,这用于包原创 2015-01-21 15:50:34 · 2549 阅读 · 0 评论 -
Lex与Yacc学习(五)之正则表达式篇
正则表达式语法lex模式是由编辑程序和实用程序使用的正则表达式的扩展版本。正则表达式由常规字符(代表它们本身)和元字符(在一种模式中具有特殊含义)组成。元字符.. 匹配除了换行符 \n 之外的任意单个字符[][] 匹配括号中字符的任意一个。用“-”(短划线)指示字符的范围,例如[0-9]指10个数字中的任意一个。如果开括号之后的第一个字符是短划线或者闭括号,那么它就不能被解原创 2015-01-21 16:25:39 · 6339 阅读 · 0 评论 -
Lex与Yacc学习(三)之符号表
符号表列举单词表的方式虽然简单但是不全面,如果在词法分析程序运行时可以构建一个单词表,那么就可以在添加新的单词时不用修改词法分析程序。下面示例便利用符号表实现,即在词法分析程序运行时从输入文件中读取声明的单词时允许动态的声明单词。声明以词性的名字开始,后面跟着要声明的单词。添加符号表可以完全的改变词法分析程序,不必在词法分析程为每个要匹配的单词放置独立的模式,只要有一个匹配任意单词的模原创 2015-01-12 17:04:45 · 4796 阅读 · 0 评论 -
Lex与Yacc学习(二)之第一个Lex程序
用lex识别单词构建一个识别不同类型英语单词的简单程序。先识别词性(名词,动词等),然后再扩展到处理符合简单英语语法的多个单词的句子。先列出要识别的一组动词:is am are were was be being been do does did will would should can could has have had原创 2015-01-12 15:47:10 · 5443 阅读 · 0 评论 -
Lex与Yacc学习(八)之变量和有类型的标记(扩展计算器)
变量和有类型的标记下一步扩展计算器来处理具有单个字母名字的变量,因为只有26个字母 (目前只关心小写字母),所以我们能在26个条目的数组(称它为vbltable)中存储变量。为了使得计算器更加有用,也可以扩展它来处理多个表达式(每行一个)和使用浮点值。具有变量和实值的计算器词法ch3-03.l%{ #include "ch3-03.tab.h" #include exter原创 2015-01-22 10:31:39 · 2921 阅读 · 3 评论