1、 20112012 学年第一学期 编译原理课程设计报告编译原理课程设计报告 专业: 计算机科学与技术 学生姓名: 张金荣 指导教师: 孔繁茹 完成时间: 2019 年 6 月 30 日 目目 录录 第 1 节 课程设计目的 1 第 2 节 课程设计要求 1 第 3 节 课程设计内容 2 第 4 节 状态转换图 . 4 第 5 节 实现工具 4 第 6 节 实现函数 4 第 7 节 测试结果 5 第 8 节 实验源代码 6 第 9 节 参考文献 9 致谢致谢 感感设计目的 理解词法分析器的基本功能。词法分析的任务是:从左至右逐个字符地对 源程序进行扫描,产生一个个的单词符号(token) ,把作
2、为字符串的源程序改造 成 单词符号串的中间程序。因此,词法分析是编译的基础。 理解词法规则的描述方法。程序设计语言一般可以用标识符、关键字、运 算符、分隔符、常量、字符串和注释符来描述 理解状态转换图及其实现。一个状态转换图可用于识别(或接受)一定的 字符。 大多数程序语言的单词符号都可以用转换图予以识别。 转换图非常易于 用程序实现,最简单的办法是让每个状态结对应一小段程序。 能够编写简单的词法分析器。 2.课程设计的要求 手工构造一个简单的词法分析程序, 能够识别标识符、整数、关键字、算符、 界符。 - - 2 画出识别单词的状态转换图。 (若状态转换图过于复杂,可以只画出主要部分;若依旧
3、复杂,可只识别标识 符和整数) 根据状态转换图手工构造词法分析程序。从以下方法中选一: 词法分析器作为独立的一遍。 词法分析结果输出到屏幕上或存入文件。 词法分析器作为一个子程序被语法分析器调用。 每次调用返回一个单词 同时将单词及属性存入符号表 实现状态转换图。从以下方法中选一: 直接转向法 表驱动法 四、选做实验四、选做实验 使用缓冲技术 3.课程设计内容 程序语言的单词符号一般可分为下列五种。 (1)关键字 是 由 程 序 语 言 定 义 的 具 有 固 定 意 义 的 标 志 符 。 本 程 序 定 义 char,short,int,unsigned,long,float,double
4、,struct,union,void,enum,cons t,typedef,auto,static,break,case,continue,default,do,else,for,if,retu rn,switch,while,sizeof,printf,FILE,fopen,NULL,fclose,exit,read,closef ,printf 为关键字。 (2)标识符 用来表示各种名字,如变量名、数组名、过程名等等。 (3)常数 常数的类型一般有整型、实型、布尔型、文字型等等。例如, 100,3.14159。 (4)运算符 如+、-、*、/、=、str111; infile.open
5、(str111.c_str (),ios:binary);/二进制文件 coutstr222; outfile.open (str222.c_str (),ios:trunc);/再次写入覆盖文件已有内容 / /将文件内容读入第一缓冲区/ for (int i=0;i) returnout (“,“空格分界符“); else retract (); returnout (“ :returnout (“,“运算符“);break; /case/ :returnout (“/“,“运算符“);break; case( :returnout (“(“,“界符“); break; case) :returnout (“)“,“界符“); break; - - 6 case :returnout (“,“界符“); break; case :returnout (“,“界符“); break; case; :returnout (“;“,“界符“); break; case. :returnout (“.“,“界符“); break; case, :returnout (“,“,“界符“); break; case :returnout (“,“界符“); break; case :returnout (“,“界符“); bre