词法分析的任务: 首先,从阶段上来看,编译器可分为若干个中间阶段: 典型的,可以包含为一个前端,一个后端。前端接收源程序产生一个中间表示,后端接收表示继续生成一个目标程序。所以,前端处理的是跟源语言有关的属性,后端处理跟目标机器有关的属性。 更细节的,前端可以划分为若干个阶段: ...
分类:
其他好文 时间:
2015-01-22 12:40:41
阅读次数:
163
第一章:词法陷阱编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”。例如,对于语句:if ( x == big ) big = x ;它的第一个符号是C语言关键字if,紧接着下一个符号是左括号,在下一个符号是标识符x,在下一个是大于号,在下一个是标识符big,以此类推。在C语言中,符...
分类:
其他好文 时间:
2015-01-14 14:02:37
阅读次数:
110
符号表
列举单词表的方式虽然简单但是不全面,如果在词法分析程序运行时可以构建一个单词表,那么就可以在添加新的单词时不用修改词法分析程序。
下面示例便利用符号表实现,即在词法分析程序运行时从输入文件中读取声明的单词时允许动态的声明单词。声明以词性的名字开始,后面跟着要声明的单词。
添加符号表可以完全的改变词法分析程序,不必在词法分析程为每个要匹配的单词放置独立的模式,只要有一个匹配任意单词的模...
分类:
其他好文 时间:
2015-01-12 17:40:10
阅读次数:
217
算法1:根据Regex构建NFA - McNaughton-Yamada-Thompson算法输入:字母表∑上的一个正则表达式r。输出:一个接受L(r)的NFA N。方法:首先对r进行语法分析,分解出组成它的子表达式。构建NFA的规则分为基本规则和归纳规则。基本规则:处理不包含运算符的子表达式。 ....
分类:
其他好文 时间:
2015-01-11 06:11:58
阅读次数:
391
虽然在平时貌似,很习以为常的一些用法但是真要弄清这几个概念的时候,确实费了很大功夫,现在虽然不能说明白但总算有了一些心得。好吧下面直接开始注本文(*)为相关链接例子1.1词法作用域规则:函数的嵌套关系是定义时决定的,而非调用时决定的,即词法作用域,即嵌套关系是由词法分析时确定的,而运行时决定。(*)...
分类:
编程语言 时间:
2015-01-06 17:12:11
阅读次数:
137
题目:
在这部分中,你将使用图转移算法手工实现一个小型的词法分析器。
* 分析器的输入:存储在文本文件中的字符序列,字符取自ASCII字符集。文件中可能包括四种记号:关键字if、符合C语言标准的标识符、空格符、回车符\n。
* 分析器的输出:打印出所识别的标识符的种类、及行号、列号信息。
根据题目的要求,定义如下的Token类:
enum TokenType{
TT_ID,
TT...
分类:
其他好文 时间:
2014-12-17 00:18:57
阅读次数:
171
构造最小DFA:构造NFA(课本上的构造法是不带ε边的,少了消ε的过程)NFA->DFA最小化DFA构造NFA:连接、并、重复NFA->DFA:从初始状态集合{S}开始,跑所有字符集,若得到新的状态集则入队。带有终结状态的集合仍然是终结状态。对状态重新编号。DFA的最小化:构造一个初始划分Π:终态集...
分类:
其他好文 时间:
2014-12-16 20:56:46
阅读次数:
201
1 // lex_analyzer.cpp : 定义控制台应用程序的入口点。 2 //词法分析器 3 /* 4 sys: 5 1-10:关键字 6 10:标识符 7 11:数字 8 //比较区 9 20: 12 23:>= 13 24:= 14 25:== 15 //运算区 16...
分类:
其他好文 时间:
2014-12-16 20:46:09
阅读次数:
192
此前一直没能系统完整地学过编译原理,只有很粗浅的理解,虽然其实对工作里的任务也没啥影响,但总觉得缺了一大块知识,加上对所谓程序员三大浪漫(编译器,操作系统,图形学)的向往,所以最近跟着网易云课堂推出的计算机专业课程来学习编译原理.无奈生性懒惰,常常下班之后觉得累了,打打游戏啊看看视频啊,拖延症就犯了...
分类:
其他好文 时间:
2014-12-15 23:19:47
阅读次数:
325
php一切的开始sapi,脚本的执行都是以sapi接口实现的,apache mod_php 、php cli都是一样只是通过不通的sapi接口。php的生命周期:MINIT(模块初始化调取各个扩展对应的minit,初始化zend引擎及核心组件包括对词法分析、语法分析、中间代码执行指针初始化等,全局变...
分类:
Web程序 时间:
2014-12-12 18:50:20
阅读次数:
169