第二章词法分析
- 格式:ppt
- 大小:1015.50 KB
- 文档页数:127


第二章词法分析➢词法记号及属性➢词法记号的描述与识别➢有限自动机➢DFA构建➢DFA化简➢词法模式的识别过程➢子集构造法词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器编译过程词法分析器的功能词法分析器记号(token)流源代码第二章词法分析词法分析器语法分析器符号表记号取下一个记号源程序本章内容➢词法分析器:把构成源程序的字符流翻译成记号流,还完成和用户接口的一些任务。➢介绍正规式、状态转换图和有限自动机概念。➢Lex与词法分析器的自动生成。本讲内容词法记号及属性0102030405词法记号词法模式词法单元词法记号的属性词法错误词法分析:编译第一步➢看一个中文的句子你们是优秀的大工学子代词动词形容词名词(短语)通过分词操作,把句子以单词或者词组为单位进行划分,得到一个句型。C语言的语句例子L1:x=IDCOLONIDASSGNy2+12;IDPLUSINTSEMI-COL编译的词法分析做的工作类似于分词,把原始的字符串流形式的程序文本转换为词法记号流的形式。例子中哪些是词法单元?➢词法单元又称单词,是编程语言中合法的字符串➢词法记号满足某种规则的词法单元,采用同一种记法。词法单元与词法记号➢满足一个给定规则的词法单元,被记为一个词法记号。词法单元词法记号模式词法模式C语言标识符的规则(模式):首字符必须是_或者字母,由_、字母或数字组成的字符串➢C语言的标识符?➢x2, 12, _12, _abc哪些是合法的C标识符?词法模式词法记号词法单元例举模式的非形式描述STRUCTstructstructFORforforRELOP<,<=,=,IDsum,_12,_xNUM3.1,10,2.8e12LITERAL“seg.error”➢常见记号及模式的例子:简单的一对一模式相对复杂一点的模式引号“和”之间的任意字符串,但引号本身除外_或字母开头的由_、字母和数字组成的串
编译原理第三版课后习题答案
编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。而《编译原理》第三版是目前被广泛采用的教材之一。在学习过程中,课后习题是巩固知识、提高能力的重要环节。本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。
第一章:引论
习题1.1:编译器和解释器有什么区别?
答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。
习题1.2:编译器的主要任务是什么?
答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
第二章:词法分析
习题2.1:什么是词法分析?
答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。
习题2.2:请给出识别下列词素的正则表达式:
(1)整数:[0-9]+
(2)浮点数:[0-9]+\.[0-9]+
(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*
第三章:语法分析 习题3.1:什么是语法分析?
答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。
习题3.2:请给出下列文法的FIRST集和FOLLOW集:
S -> aAb
A -> cA | ε
答案:
FIRST(S) = {a}
FIRST(A) = {c, ε}
FOLLOW(S) = {$}
FOLLOW(A) = {b}
第四章:语义分析
习题4.1:什么是语义分析?
答案:语义分析是对源程序进行静态和动态语义检查的过程。
习题4.2:请给出下列文法的语义动作:
S -> if E then S1 else S2
答案:
1. 计算E的值
2. 如果E的值为真,则执行S1;否则执行S2。
第五章:中间代码生成
习题5.1:什么是中间代码?
1 第一章 词法分析
编译过程的第一步是进行词法分析,该任务由词法分析器完成。本章首先讨论用手工方式设计并实现词法分析器的方法和步骤,主要内容有:词法分析器的作用、源程序的输入与词法分析器的输出、单词符号的描述及识别、词法分析器的设计与实现。
1.1 词法分析器的作用
词法分析器的作用是:扫描源程序字符流,按照源语言的词法规则识别出各类单词符号,并产生用于语法分析的记号序列。在词法分析过程中,还应进行词法检查。由于词法分析器的输入是源程序,故还可以完成与用户接口的一些任务,如跳过源程序中的注释和空白,把来自编译程序的错误信息和源程序联系起来,如记住新读入的字符在源程序中的位置(行/列),从而行号可以作为错误信息的一部分提示给用户。有些词法分析器可以复制源程序,并把错误信息嵌入其中。在本系统中,词法分析器scanner的主要功能如图1.1所示:
关键字
标示符
界符
图 1.1 词法分析器的功能
1.1.1 词法分析器与语法分析器的关系
将词法分析单独作为一遍来实现,此时可将词法分析器的输出放入—个中间文件,语法分析器从该文件取得它的输入。若机器的内存容量足够大,也可将词法分析的结果放在内存中,以提高存取效率。这样,通过这一遍的加工,就可以将以字符流表示的源程序加工成以记号序列表示的源程序了,如图1.2所示。
图1.2词法分析器单独作为一遍
1.1.2分离词法分析器的好处
可以简化设计。如词法分析器在扫描字符流源程序的过程中,可以很容易地识别并删除源程序中的注释和空格,以便语法分析器致力于语法分析,结构清晰,实现起来也较容易。
可以改进编译器的效率。由于编译的大部分时间消耗在读源程序并把它分成记号上,将词法分析器独立出来,可以构造专门的更有效的词法分析器。利用专门的读字符和处理记号的技术以加快编译速度。 字符 符号 源
第一章:编译系统概述
一.单选题
1.编译程序前三个阶段完成的工作是( C )。
A.词法分析、语法分析和代码优化
B.代码生成、代码优化和词法分析
C.词法分析、语法分析、语义分析和中间代码生成
D.词法分析、语法分析和代码优化
2.编译程序绝大多数时间花在( D )上。
A.出错处理 B.词法分析 C.目标代码生成 D.表格管理
3.编译程序是对( C )。
A.汇编程序的翻译 B.高级语言程序的解释执行
C.高级语言的翻译 D.机器语言的执行
4.在使用高级语言编程时,首先可通过编译程序发现源程序的全部( A )错误。
A.语法 B.语义 C.语用 D.运行
二.填空题
1.编译程序首先要识别出源程序中每个( 单词 ),然后再分析每个( 句子 )并翻译其意义。
2.通常把编译过程分为分析前端与后端两大阶段。词法、语法和语义分析是对源程序的( 分析 ),中间代码生成、代码优化与目标代码的生成则是对源程序的 (综合 )。
3.对编译程序而言,输入数据是( 源程序 ),输出结果是( 目标程序 )。
4.对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、
代码生成)报告的。
(1) else 没有匹配的if (语法分析)
(2) 数组下标越界 (语义分析)
(3) 使用的函数没有定义 (语法分析)
(4) 在数中出现非数字字符 (词法分析)
5.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: ( 编译阶段 ) 和( 运行阶段 )。如果编译程序生成的目标程序是汇编语言程序,则源程序的执行方式分成三个阶段:( 编译阶段 )( 汇编阶段 )和( 运行阶段 )。
6.编译程序在其工作过程使用最多的数据结构是( 表 ),它记录着源程序中各种信息,以便查询或修改,在这些( 表 )中,尤以( 符号表 )最重要,它的生存期最长,使用也最频繁。