随笔分类 -  编译原理

符号表的简单使用
摘要:符号表 (symbol table) 是一种供编译用于保存有关源程序构造的各种信息的数据结构。 这些信息在编译器的分析阶段被逐步收集并放入符号表,它们在综合阶段用于生成目标代码。符号表的每个条目包含与一个标识符相关的信息,比如它的字符串(或者词素)、它的类型、它的存储位置和其他相关信息。符号表通常需要支持同一标识符在一个程序中的多重声明.每个带有声明的程序块都会有自己的符号表,这个块中的每个声明都在此符号表中有一个对应的条目。例如下面的例子:{ int x; char y; { bool y; x; y; } x; y; }我们知道 第二个{}里面的 x、y 分别是 int、bool 类型, 阅读全文
posted @ 2014-02-26 19:49 Still_Raining 阅读(11628) 评论(0) 推荐(1)
一个简单的词法分析器
摘要:词法分析(Lexical Analysis) 是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符、将他们组成词素,生成并输出一个词法单元序列,每个词法单元对应一个词素。这个词法单元序列被输出到语法分析器进行语法分析。知识储备词法单元:由一个词法单元名和一个可选的属性值组成。词法单元名是一个表示某种词法单位的抽象符号,比如一个特定的关键字,或者代表一个标识符的输入字符序列。词法单元名字是由语法分析器处理的输入符号。模式:描述了一个词法单元的词素可能具有的形式。词素: 源程序中的一个字符序列,它和某个词法单元的模式匹配,并被词法分析器识别为该词法单元的一个实例。例如:count = .. 阅读全文
posted @ 2014-02-25 17:00 Still_Raining 阅读(31467) 评论(2) 推荐(0)
一个简单的语法分析器(后缀式转换)
摘要:编译原理很神奇,经过一次次小小的步骤,然后奇迹就出现了。对于中缀式转后缀式,这已经不算一个很困难的问题了,之前也学了很多能够解决此问题的数据结构和算法,比如栈和表达式树。今天算是又多学了一种解法。不同的是,该方法更强劲。构造产生式定义一下字母表 {0-9+-*/ \t\n}产生式:expr->expr + term|expr - term|termterm->term * factor|term / factor|factorfactor->digits | (expr)digits->digits digit | -digitsdigit->0|1|2|3|4| 阅读全文
posted @ 2014-02-18 16:22 Still_Raining 阅读(1286) 评论(0) 推荐(0)