编译原理实验报告(词法分析器语法分析器).docx

编译原理实验报告(词法分析器语法分析器).docx

ID:58642219

大小:204.60 KB

页数:11页

时间:2020-10-17

编译原理实验报告(词法分析器语法分析器).docx_第1页
编译原理实验报告(词法分析器语法分析器).docx_第2页
编译原理实验报告(词法分析器语法分析器).docx_第3页
编译原理实验报告(词法分析器语法分析器).docx_第4页
编译原理实验报告(词法分析器语法分析器).docx_第5页
资源描述:

《编译原理实验报告(词法分析器语法分析器).docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、..编译原理实验报告实验一一、实验名称:词法分析器的设计二、实验目的:1,词法分析器能够识别简单语言的单词符号2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。三、实验要求:给出一个简单语言单词符号的种别编码词法分析器四、实验原理:1、词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。2、程序流程图(1)主程序输入要分析的语句判断读入字符是否为“#”调用扫描、分析程序输出单词符号二元组结束..(2)扫描子程序Token清空Get()当前字符=?标

2、示符常数表中查找结束Error()基本字用户标示符输出二元式结束3、各种单词符号对应的种别码单词符号种别码助记符码值while1while-if2if-else3else-switch4switch-case5case-标识符6idid在符号表中的位置常数7numnum在常数表中的位置+8+--9--*10*-<=11relopLE<11relopLT==11relopEQ=12=-;13;-五、实验容:1、实验分析编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s(char型),i,j,k(int型),a[]用来存放输入的字符串,token[]

3、另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过intdigit(charc)、intletter(charc)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数intlookup(chartoken[])来判断标识符和保留字。2实验词法分析器源程序:#include#include#includeinti,j,k;charc,s,a[20],t

4、oken[20]={'0'};intletter(chars){if((s>=97)&&(s<=122))return(1);elsereturn(0);}intdigit(chars){if((s>=48)&&(s<=57))return(1);elsereturn(0);}voidget(){s=a[i];i=i+1;}voidretract(){i=i-1;}intlookup(chartoken[20]){if(strcmp(token,"while")==0)return(1);elseif(strcmp(token,"if")==0)return(2);else

5、if(strcmp(token,"else")==0)return(3);elseif(strcmp(token,"switch")==0)return(4);elseif(strcmp(token,"case")==0)return(5);elsereturn(0);}voidmain(){printf("pleaseinputstring:");i=0;do{i=i+1;scanf("%c",&a[i]);}while(a[i]!='#');i=1;j=0;get();while(s!='#'){memset(token,0,20);switch(s){case'a

6、':case'b':case'c':case'd':case'e':case'f':case'g':case'h':case'i':case'j':case'k':case'l':case'm':case'n':case'o':case'p':case'q':case'r':case's':case't':case'u':case'v':case'w':case'x':case'y':case'z':while(letter(s)

7、

8、digit(s)){token[j]=s;j=j+1;get();}retract();k=lookup(token);if(k==0)pri

9、ntf("(%d,%s)",6,token);elseprintf("(%d,-)",k);break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':while(digit(s)){token[j]=s;j=j+1;get();}retract();printf("%d,%s",7,token);break;case'+':printf("('+',NULL)");break;case'-':print

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。