- 1
- 0
- 约1.18万字
- 约 9页
- 2017-07-29 发布于湖北
- 举报
第3章 词法分析
本章将基于第二章介绍的几种典型的自动机,用自动机或表的方式实现词法分析器的设
计。词法分析器在编译器中的位置与作用如图 3.1 所示。
图 3.1 词法分析器在编译器中的位置与作用
编译器首先识别出源程序中每个单词,然后再分析每个语句并翻译其意义。识别单词的
任务是由词法分析器(也称为扫描器——scanner)完成的。它把识别出来的单词变成机内表
示形式交给语法分析器。
3.1. 单词的种类与机内表示法
3.1.1. 单词的种类
根据单词在高级语言中的作用,可分为以下几种类型:
(1) 关键字:又称为基本字、语言字。在语言中若规定不允许用关键字作标识符,
又称为保留字。如main,while,if,else,⋯等。
(2 ) 标识符:如变量名、数组名、过程名、函数名等。
(3 ) 常数:分为整型、实型、布尔型、字符型等。
(4 ) 运算符:如算术运算符、逻辑运算符、关系运算符。
(5 ) 界限符:如 , 、; 、�、�、�、�、 = 、[、] 等。
(6 ) 编辑符:如空格符、回车符、换行符、制表符等。
3-1
3.1.2. 单词的机内表示法
单词的机内表示采用如下的长度统一的二元形式(token 字):
(单词种别码,单词语义值)
其中,
(1) 种别码表示单词的种类。
对单词怎样进行编码有多种方法。基本原则是最大限度地把各个单词区别开来。一般的
方法是让每种单词对应一个整数码。
(1.1) 关键字 if、else、while 、…,通常是一字一种,并且最好把这些关键字按
字典顺序排序,然后按序编号,以便在识别出一个关键字时,可以很容易地查到它的种别码。
(1.2) 各类标识符统一做为一种单词。
(1.3) 常数有好几种类型,通常按类型编种别码。
(1.4) 界限符和运算符通常是按一符一种来编码。
(2 ) 单词语义值可以是下述情况之一:
(2.1 ) 语义值是单词本身符号(串)的机内编码(例如ASCII 码)。
如果单词是标识符,则它的语义值是标识符自身字符串。由于要求token 的长度统
一,所以需要对标识符的长度加以限制,如长度在8 字符以内。这意味着对较长的标识符需
要截断。
对于常数来说,其语义值就是常数本身的二进制数值。
对于关键字、界限符之类的一字一码、一符一码的单词,由于它们的种别码已经唯
一地表示了这些单词,因此,它们的语义值就不用给出。
(2.2 ) 语义值是一指示器,它表示标识符(或常数)在符号表(或常数表)中的
入口位置。这意味着扫描器需要兼管查填符号表的工作。
对于关键字、界限符的语义值的处理同 (2.1 )。
为了便于扫描器在构造单词的二元式时能方便地找到该单词的种别码,需要恰当地给程
序语言的单词编码,并且用合适的数据结构存贮它们。具体情况可根据编译器的规模参考《数
据结构》的有关内容。本讲义在3.3 节将给出一种简单的解决方案供参考。
3.2. 词法分析器的任务
扫描器的基本任务是从左向右扫描每行源程序的符号,拼成单词,换成统一的内部表示
(token),然后送给语法分析程序。具体地说:
(1) 组织源程序的输入。
(2) 按规则拼单词,并转换成二元形式。(单词种别码,单词自身值)
(3) 删除注解行。
(4) 删除空格及无用符号。(如回车符、字符常数的引号等)
(5) 行记数,列记数(列记数用于定位词法错误)
(6) 列表打印源程序
(7) 发现并定位词法错误
(8) 如果需要,还要建立符号表、常数表等表格。
分析的源程序,即词法分析器的输入是如图 3.2 所示的一个简单的C 语言程序。词法
分析器的输出为token 串。
3-2
/* 这是一个简单的C语言程序*/
void main()
您可能关注的文档
最近下载
- 某天然气公司燃气系统运行安全现状评价报告.doc
- 维修Switch+中文版教程.pdf VIP
- 公共营养师四级试题【含答案】.docx VIP
- 统编人教部编版小学六年级下册道德与法治第一单元教学案.docx VIP
- IPC-6012F-CN-中文版 2024 TOC 刚性印制板的鉴定及性能规范.pdf VIP
- 2025年寒假作业七年级生物北师大版答案.pdf VIP
- impella for doctors左心辅助知识讲座.pptx VIP
- 成人患者医用粘胶相关性皮肤损伤的预防及护理(1).pptx VIP
- 安徽省高新技术产品国际竞争力:现状、挑战与提升策略.docx VIP
- PENTAX宾得 645NII相机手册.pdf VIP
原创力文档

文档评论(0)