编译原理课程设计词法分析器分析.doc

上传人:文库蛋蛋多 文档编号:2386149 上传时间:2023-02-17 格式:DOC 页数:13 大小:137.50KB
返回 下载 相关 举报
编译原理课程设计词法分析器分析.doc_第1页
第1页 / 共13页
编译原理课程设计词法分析器分析.doc_第2页
第2页 / 共13页
编译原理课程设计词法分析器分析.doc_第3页
第3页 / 共13页
编译原理课程设计词法分析器分析.doc_第4页
第4页 / 共13页
编译原理课程设计词法分析器分析.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《编译原理课程设计词法分析器分析.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计词法分析器分析.doc(13页珍藏版)》请在三一办公上搜索。

1、XX大学学生课程设计(论文)题 目:词法分析器分析学 号:姓 名:专业年级:2012级计算机科学与技术教师姓名:2015年 6 月 15日摘 要词法分析的主要任务是对源程序进行扫描,词法分析是编译的第一个阶段,词法分析器工作时从左向右逐个字符地对源程序进行扫描,是语法分析的基础。词法分析器的分析过程调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符。关键词:词法分析 标识符AbstractLexical

2、analysis is the main task of the source program for scanning, the compiler lexical analysis is the first stage, the lexical analyzer to work each character from left to right to scan the source program, and is the basis of the syntax analysis. The analysis of the lexical analyzer procedure call GETS

3、YM, it through the GETCH process from source program one character at a time. If the character is a letter, continues to get characters or Numbers, finally can spell a word, check the reserved word table, if find as reserved words, SYM variable into corresponding reserved word type value; If not che

4、cked, this word should be a user-defined identifier. 【Key words】 lexical analysis Identifier目 录引 言51.设计思路62.设计意义63.词法分析器的分析73.1 词法分析器的任务73.2设计内容及功能73.3输出74.词法分析器的设计75.程序源代码76.结果分析117.心得体会12参考文献13引 言在网络世界中,我们往往对功能强大的程序叹为观止。而这些强大程序的背后是编译这些程序的编译软件,是这些编译软件承托起了这些功能强大的运行程序。我们有不少的同志致其自身于无尽的运行程序上。而只有很少的人搞编译

5、程序。这就是为什么中国的可运行程序满天飞,而编译程序却很少。本课程设计就是在这方面的探索,为你解读编译程序的奥秘。其中最基本的编译程序就是词法分析器,词法分析是编译过程的基础,这个过程模拟了一台可以运行类PCODE指令的栈式计算机。下面就让我们一起走进编译程序的世界,去领悟它的奥秘吧。1.设计思路词法分析是编译的第一个阶段,它的主要任务是从左向右逐个字符地对源程序进行扫描,产生一个个单词序列用于语法分析。PL/0词法分析程序GETSYM的功能是为语法分析提供单词用的,是语法分析的基础,把输入的字符串形式的源程序分割成一个个单词符号。经过词法分析程序分析出来的单词,对语言固有的单词只给出类别存放

6、在全程变量SYM中,而对用户定义的单词(标识符或常数)既给出类别又给值,其类别放在SYM中,值放在全程变量ID或全程变量NUM中,全部单词种类由编译程序定义的纯量类型。SYMBOL给出,称为语法词汇表。词法分析器的分析过程:调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把SYM置为IDENT,把这个单词存入ID变量。查保留字表时使用了二分法查找以提高效率。如

7、果Getch获得的字符是数字,则继续用Getch获取数字,并把它们拼成一个整数或实数,然后把SYM置为INTEGER,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把SYM则成相应的类型。如果遇到不合法的字符,把SYM置成NUL。2.设计意义在学习编译原理课程设计中,结合各章节的构造编译程序的基本理论,实现对源程序的扫描,把整个源程序翻译成一个个单词符号,并存入一外部文件中,语法分析程序再对该文件中的一连串的单词符号进行语法分析。3.词法分析器的分析3.1 词法分析器的任务 词法分析程序的任务是读入源程序,输出单词符号。3.2设计内容及功能 设

8、计各单词的状态转换图,并为不同的单词选择种别码。将词法分析器设计成供语。功能包括:能够拼出语言中的各个单词、将拼出的标识符填入符号表、返回。3.3输出 词法分析器所输出单词符号常常表示成如下的二元式: (单词种别,单词符号的属性值) 单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性或特征。 4.词法分析器的设计 词法分析器工作的第一步是输入源程序文本。在许多情况下,为了更好地

9、对单词符识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。词法分析的过程当中,有时候为了确定词性,可能需要超前扫描若干个字符。5.程序源代码#include /*定义I/O库所用的某些宏和变量*/ #include /*定义字符串库函数*/ #include /*提供有关屏幕窗口操作函数*/ #include /*分类函数*/ char prog80=0;char token8; /*存放构成单词符号的字符串*/ char ch;int syn; /*存放单词字符的种别码*/ int n; int sum; /*存放整数型单词*/int m,p; /*p是缓冲区prog的指针,

10、m是token的指针*/ char *rwtab6=begin,if,then,while,do,end; void scaner() m=0; sum=0; for(n=0;n8;n+) tokenn=0;ch=progp+; while(ch= ) ch=progp+; if(isalpha(ch) /*ch为字母字符*/ while(isalpha(ch)|isdigit(ch) /*ch 为字母字符或者数字字符*/ tokenm+=ch; ch=progp+; tokenm+=0; ch=progp-;syn=10; for(n=0;n6;n+) if(strcmp(token,rwt

11、abn)=0) /*字符串的比较*/ syn=n+1; break;else if(isdigit(ch) /*ch是数字字符*/ while(isdigit(ch) /*c是数字字符*/ sum=sum*10+ch-0; ch=progp+; ch=progp-; syn=11; else switch(ch) case syn=21; tokenm+=ch;else syn=20; ch=progp-; break;case:m=0;tokenm+=ch;ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=23; ch=progp-; break

12、;case:m=0;tokenm+=ch;ch=progp+; if(ch=) syn=18; tokenm+=ch;else syn=17; ch=progp-; break;case+:syn=13;token0=ch;break; case-:syn=14;token0=ch;break; case*:syn=15;token0=ch;break; case/:syn=16;token0=ch;break; case):syn=19;token0=ch;break; case=:syn=25;token0=ch;break; case;:syn=26;token0=ch;break; c

13、ase(:syn=27;token0=ch;break;case:syn=28;token0=ch;break; case:syn=29;token0=ch;break; case:syn=30;token0=ch;break; case:syn=31;token0=ch;break; case#:syn=0;token0=ch;break;default:syn=-1;main() printf(nnThe significance of the figures:n 数字1到6代表关键字n数字10到11代表其他标识n 数字3到31代表操作n)p=0;printf(nplease input

14、string:n); do ch=getchar(); progp+=ch; while(ch!=#);p=0;do scaner(); switch(syn) case 11: printf(%d,%d)n,syn,sum);break; case -1: printf(n ERROR;n);break; default: printf(%d,%s)n,syn,token); while(syn!=0); getch(); 6.结果分析7.心得体会 通过这次课程设计我对编译原理这门课程有了更深刻的认识,把理论知识运用到实践当中我们会发现其中会隐藏着无穷的乐趣,同时也加深了自己对C语言的运用和

15、理解能力。这次课程设计,让我学到了一些东西,让我认识到了编译程序的重要性,但更多的是发现了自己的不足,知识的极度匮乏,让设计的进程变得很缓慢,一些很基本的东西都要通过反复查阅资料来完成,在以后的学习生活当中自己一定要注意把基础打牢,实践离不开理论基础,如果连理论知识都掌握不好的话,实践过程当中基本上是无法进行下去的。同时,我在实验过程当中也认识到了团队的重要性,有的同学这方面可能学的好一点,另一些同学另一方面学的牢固一点,把每个人的优势结合起来,会很有效的加快实验的进度。但是,切忌自己完全不动手,全部靠其他同学帮忙完成,一定要自己动手操作,不懂的地方或者实在是有些环节卡住不动,实在弄不出来,可以叫同学在旁边指导一下,指出自己的问题所在,如果自己不动手,只是在旁边看其他同学一步步的操作完成的话,看起来自己好像看懂了具体的操作过程,然而真正的要自己动手的话,却发现完成不是那么一回事儿。饭还是得自己一口一口慢慢的吃,总是要别人喂的话是永远也学不会自己吃饭的。相信通过这次实验,我会在以后的工作学习生活当中更具有专业性更富有激情。也一定会更加努力的完善自己的学习体系。充分发挥自己的优点,改正自己的缺点。参考文献【1】编译原理Alfred V.Aho等,李建中译,机械工业出版社【2】编译原理,吕映芝、张素琴、蒋维杜编著,清华大学出版社【3】编译原理(第三版)何炎祥主编,华中科技大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号