您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 编译原理词法分析器论文
XX大学学生课程设计(论文)题目:词法分析器分析学号:姓名:专业年级:2012级计算机科学与技术教师姓名:2015年6月15日2摘要词法分析的主要任务是对源程序进行扫描,词法分析是编译的第一个阶段,词法分析器工作时从左向右逐个字符地对源程序进行扫描,是语法分析的基础。词法分析器的分析过程调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符。关键词:词法分析标识符3AbstractLexicalanalysisisthemaintaskofthesourceprogramforscanning,thecompilerlexicalanalysisisthefirststage,thelexicalanalyzertoworkeachcharacterfromlefttorighttoscanthesourceprogram,andisthebasisofthesyntaxanalysis.TheanalysisofthelexicalanalyzerprocedurecallGETSYM,itthroughtheGETCHprocessfromsourceprogramonecharacteratatime.Ifthecharacterisaletter,continuestogetcharactersorNumbers,finallycanspellaword,checkthereservedwordtable,iffindasreservedwords,SYMvariableintocorrespondingreservedwordtypevalue;Ifnotchecked,thiswordshouldbeauser-definedidentifier.【Keywords】lexicalanalysisIdentifier4目录引言..................................................................................................................51.设计思路.............................................................................................................62.设计意义.............................................................................................................63.词法分析器的分析.............................................................................................73.1词法分析器的任务................................................................................73.2设计内容及功能.....................................................................................73.3输出.........................................................................................................74.词法分析器的设计.............................................................................................75.程序源代码.........................................................................................................76.结果分析...........................................................................................................117.心得体会...........................................................................................................12参考文献..............................................................................................................135引言在网络世界中,我们往往对功能强大的程序叹为观止。而这些强大程序的背后是编译这些程序的编译软件,是这些编译软件承托起了这些功能强大的运行程序。我们有不少的同志致其自身于无尽的运行程序上。而只有很少的人搞编译程序。这就是为什么中国的可运行程序满天飞,而编译程序却很少。本课程设计就是在这方面的探索,为你解读编译程序的奥秘。其中最基本的编译程序就是词法分析器,词法分析是编译过程的基础,这个过程模拟了一台可以运行类PCODE指令的栈式计算机。下面就让我们一起走进编译程序的世界,去领悟它的奥秘吧。61.设计思路词法分析是编译的第一个阶段,它的主要任务是从左向右逐个字符地对源程序进行扫描,产生一个个单词序列用于语法分析。PL/0词法分析程序GETSYM的功能是为语法分析提供单词用的,是语法分析的基础,把输入的字符串形式的源程序分割成一个个单词符号。经过词法分析程序分析出来的单词,对语言固有的单词只给出类别存放在全程变量SYM中,而对用户定义的单词(标识符或常数)既给出类别又给值,其类别放在SYM中,值放在全程变量ID或全程变量NUM中,全部单词种类由编译程序定义的纯量类型。SYMBOL给出,称为语法词汇表。词法分析器的分析过程:调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把SYM置为IDENT,把这个单词存入ID变量。查保留字表时使用了二分法查找以提高效率。如果Getch获得的字符是数字,则继续用Getch获取数字,并把它们拼成一个整数或实数,然后把SYM置为INTEGER,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把SYM则成相应的类型。如果遇到不合法的字符,把SYM置成NUL。2.设计意义在学习《编译原理》课程设计中,结合各章节的构造编译程序的基本理论,实现对源程序的扫描,把整个源程序翻译成一个个单词符号,并存入一外部文件中,语法分析程序再对该文件中的一连串的单词符号进行语法分析。73.词法分析器的分析3.1词法分析器的任务词法分析程序的任务是读入源程序,输出单词符号。3.2设计内容及功能设计各单词的状态转换图,并为不同的单词选择种别码。将词法分析器设计成供语。功能包括:能够拼出语言中的各个单词、将拼出的标识符填入符号表、返回。3.3输出词法分析器所输出单词符号常常表示成如下的二元式:(单词种别,单词符号的属性值)单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性或特征。4.词法分析器的设计词法分析器工作的第一步是输入源程序文本。在许多情况下,为了更好地对单词符识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。词法分析的过程当中,有时候为了确定词性,可能需要超前扫描若干个字符。5.程序源代码#includestdio.h/*定义I/O库所用的某些宏和变量*/#includestring.h/*定义字符串库函数*/#includeconio.h/*提供有关屏幕窗口操作函数*/8#includectype.h/*分类函数*/charprog[80]={'\0'};chartoken[8];/*存放构成单词符号的字符串*/charch;intsyn;/*存放单词字符的种别码*/intn;intsum;/*存放整数型单词*/intm,p;/*p是缓冲区prog的指针,m是token的指针*/char*rwtab[6]={begin,if,then,while,do,end};voidscaner(){m=0;sum=0;for(n=0;n8;n++)token[n]='\0';ch=prog[p++];while(ch=='')ch=prog[p++];if(isalpha(ch))/*ch为字母字符*/{while(isalpha(ch)||isdigit(ch))/*ch为字母字符或者数字字符*/{token[m++]=ch;ch=prog[p++];}token[m++]='\0';ch=prog[p--];syn=10;for(n=0;n6;n++)if(strcmp(token,rwtab[n])==0)/*字符串的比较*/{syn=n+1;break;}}elseif(isdigit(ch))/*ch是数字字符*/{while(isdigit(ch))/*c是数字字符*/{sum=sum*10+ch-'0';ch=prog[p++];}9ch=prog[p--];syn=11;}elseswitch(ch){case'':m=0;token[m++]=ch;ch=prog[p++];if(ch==''{syn=21;token[m++]=ch;}else{syn=20;ch=prog[p--];}break;case'':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=23;ch=prog[p--];}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}else{syn=17;10ch=prog[p--];}break;case'+':syn=13;token[0]=ch;break;case'-':syn=14;token[0]=ch;break;case'*':syn=15;token[0]=ch;break;case'/':syn=16;token[0]=ch;break;case')':syn=19;token[0]=ch;break;case'=':syn=25;token[0]=ch;break;case';':syn=26;token[0]=ch;break;case'(':syn=27;token[0]=ch;break;case'{':syn=28;token[0]=ch;break;case'}':syn=29;token[0]=ch;break;case'[':syn=30;token[0]=ch;break;case']':syn=31;tok
本文标题:编译原理词法分析器论文
链接地址:https://www.777doc.com/doc-2069431 .html