资源描述:
《西南交大编译原理课程设计(词法分析解析器和语法分析解析器).docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理课程设计报告院系专业年级学号姓名西南交通大学信息科学与技术学院2013年12月8日16课程设计一:手工设计C语言的词法分析器一、设计内容手工设计c语言的词法分析器,结合状态转换图的原理完成对c语言源程序的基本单词的分析及提取,并设计相应的数据结构保存提取出来的单词。以及对c语言中的保留字的处理策略,实现一个完整的C语言的词法分析器的编写。二、设计目的通过本实验的设计更具体的理解词法分析器的工作机制。同时更理解C语言的结构体系。从而更深刻的透析编译原理过程。三、设计平台1、硬件环境(1)Intel(R)Core(TM)i3-2310MCPU@2
2、.10GHz2.10GHz(2)内存4G2、软件环境(1)Window8Professor(2)VisualC++6.0开发软件3、开发语言:C语言。四、需求分析:词法分析程序又称词法分析器或词法扫描器。可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词,这里,作为子程序词法分析器的结构:源程序输入缓冲区预处理子程序扫描缓冲区1扫描缓冲区2词法分析子程序返回一个单词调用数据16状态转换图的程序实现为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:1)ch存放
3、最新读进的源程序字符2)strToken存放构成单词符号的字符串3)Buffer字符缓冲区4)structkeyType存放保留字的符号和种别五、概要设计保留字表的设计结构:基本功能状态转换:六、详细设计1.GETCHAR读一个字符到ch中2.GETBC读一个非空白字符到ch中3.CONCAT把CHAR中字符连接到strToken之后161.LETTER判断CHAR中字符是否为字母2.DIGIT判断ch中字符是否为数字3.RESERVE用strToken中的字符串查找保留字表,并返回保留字种别码,若返回零,则非保留字4.RETRACT把CHAR中字符
4、回送到缓冲区源程序:#include"stdio.h"#include"stdlib.h"#include"conio.h"#include"string.h"#defineN47//保留字个数charch=' ';//存放最新读进的源程序字符charstrToken[20]=" ";//存放构成单词符号的字符串charbuffer[257]=" ";//字符缓冲区/*------------保留字结构-------------*/structkeyType{charkeyname[256];intvalue;}Key[N]={{"$ID",0
5、},{"$INT",1},{"auto",2},{"break",3},{"case",4},{"char",5},{"const",6},{"continue",7},{"default",8},{"do",9},{"double",10},{"else",11},{"enum",12},{"extern",13},{"float",14},{"for",15},{"goto",16},{"if",17},{"int",18},{"long",19},{"register",20},{"return",21},{"short",22},{"sign
6、ed",23},{"sizeof",24},{"static",25},{"struct",26},{"switch",27},{"typedef",28},{"union",29},{"unsigned",30},{"void",31},{"volatile",32},{"while",33},{"=",34},{"+",35},{"-",36},{"*",37},{"/",38},{"%",39},{",",40},{";",41},{"(",42},{")",43},{"?",44},{"clear",45},{"#",46}};/*-----
7、--------子过程-------------*/voidGetChar()//读一个字符到ch中{inti;if(strlen(buffer)>0){ch=buffer[0];for(i=0;i<256;i++)buffer[i]=buffer[i+1];}elsech=' ';}voidGetBC()//读一个非空白字符到ch中{inti;while(strlen(buffer)){i=0;ch=buffer[i];for(;i<256;i++)buffer[i]=buffer[i+1];if(ch!=''&&ch!=''&&ch!='
8、0')break;16}}voidConCat()//把ch连接到strToken之后{chartemp[2