一、实验目的
(1)理解词法分析在编译程序中的作用;
(2)加深对有限自动机模型的理解;
(3)掌握词法分析程序的实现方法和技术。
二、开发语言及实现平台或实验环境
操作系统:Win7;
开发工具:codeblocks 10.05 ;
内存:512M
CPU:p(D)2.8hz
实验内容
输入:根据教学要求和学生具体情况,从具有代表性的高级程序设计语言中,选取一个适当大小的子集,例如可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。
输出:单词串的输出形式,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码,VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和分隔符,采用一词一类的编码形式。由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。不过,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上直接放置单词符号串本身。
描述语言的文法
关键字: 本程序识别的关键字为int float char main if else switch case printf return ,仅当单独出现以上标识符时识别为关键字,对于inta,ifb等识别为标识符。
标识符: 一个标识符必须以字母开头,后面接上字母和数字,否则产生报错信息,程
序停止词法分析,输出相关错误信息
如: 正确:abc, abc123, 等,错误:123abc
操作符: 本程序识别的操作符为: + - / * | & = < >
分隔符: 本程序识别的分隔符为: ( ) { } ; : , “
数字: 识别的数字遵循以下文法规则:
digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
intnumber digit+
exponent (E|e) ( + | - | ) digit+
fraction . digit+realnumber digit+ exponent | digit+ fraction ( exponent | )
例如:正确: 123, 123E2, 123.3123.3E4
错误: 123A,123E, 123.A . 123.3A, 123.3E
<标识符>→<字母><字母数字串>