编译原理-词法分析器-仅供参考-不可滥用!.doc_第1页
编译原理-词法分析器-仅供参考-不可滥用!.doc_第2页
编译原理-词法分析器-仅供参考-不可滥用!.doc_第3页
编译原理-词法分析器-仅供参考-不可滥用!.doc_第4页
编译原理-词法分析器-仅供参考-不可滥用!.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

青岛理工大学课程实验报告课程名称编译原理班级实验日期姓名未名学号实验成绩实验名称实验一 词法分析实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。实验要求1. 待分析的简单的词法(1)关键字: begin if then while do end所有的关键字都是小写。(2)运算符和界符: = + - * / = = = ; ( ) #(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。2. 各种单词符号对应的种别码:表2.1 各种单词符号对应的种别码单词符号种别码 单词符号种别码bgin1:17If2:=18Then320wile421do523lettet(letter|digit)*10=24dight dight*11=25+13;2614(27*15)28/16#0+1313!31-1414!=3125=2525可继续扩充3. 词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。例如:对源程序begin x:=9: if x9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)实验环境1. Visual C+6.02. Win7/Windows XP实验内容 根据实验要求,设计一个词法分析器,能根据不同的程序,进行分析,获得各标识符的分类表示。对设计的词法分析程序进行验证,实验几组程序编码,判断是否满足要求(1).主程序示意图char *rwtab=begin,if,then,while,do,end,KEY_WORD_END;/关键字表置初值调用扫描子程序输出单词二元组输入串结束 否 是结束(2).扫描子程序示意图首先设置3个变量:token用来存放构成单词符号的字符串;sum用来整型单词;syn用来存放单词符号的种别码 调试过程及实验结果1. 测试一输入begin x:=9: if x9 then x:=2*x+1/3; end ;# 后经词法分析输出如图所示:2. 测试二输入begin int m=3;n=2;if(m=n) s=m;n=m%n;end ;# 后经词法分析输出如图所示:附录(源代码)#include /头文件声明#include /头文件声明#define KEY_WORD_END key word end/定义关键字结束标志#define KEY_WORD_SIZE 6 /定义关键字表中的关键字数目char input255;/*字符输入缓冲区*/char token255;/*单词缓冲区-用来存放构成单词符号的字符串*/char *rwtab=begin,if,then,while,do,end,KEY_WORD_END;/关键字表char ch;/*字符*/int syn;/*单词符号种别码*/int sum;/*存放整数型单词*/int w_length;/*所读取的单个单词长度*/int s_length;/*当前所读取的字符串长度*/int n;/定义简单变量int IsLetter(char c)/判断是否为字母 if(c=a)|(c=A)return 1; elsereturn 0;int IsDigit(char c)/判断是否为数字 if(c=0&c=9) return 1; else return 0;int IsBlankSpaceOrNextLine(char c)/判断接是否为空格或换行符if(c= |c=n)return 1;elsereturn 0;void retract()/回退一个字符s_length-;int wordScanAnalyse()/*单词扫描分析方法*/ sum=0; for(w_length=0;w_length7;w_length+)tokenw_length+=NULL;ch=inputs_length+;w_length=0; while(IsBlankSpaceOrNextLine(ch)ch=inputs_length+; if(IsLetter(ch)/判断以字母开头的字符串 while(IsLetter(ch)|IsDigit(ch) tokenw_length+=ch;ch=inputs_length+; retract(); syn=10; for(n=0;nKEY_WORD_SIZE;n+) if(strcmp(token,rwtabn)=0) syn=n+1; break; else if(IsDigit(ch)/判断以数字开头的字符串 while(IsDigit(ch) sum=sum*10+ch-0;ch=inputs_length+;/*if(IsLetter(ch)/判断以数字开头的字符串失败syn=-1;break;*/retract();syn=11; else switch(ch)/判断其他字符 case ) syn=21; tokenw_length+=ch; else syn=20; retract();/回退一个字符 break; case : tokenw_length+=ch; ch=inputs_length+; if(ch=) syn=24; tokenw_length+=ch; else syn=23; retract(); break; case +: tokenw_length+=ch; ch=inputs_length+; if(ch=+) syn=1313; tokenw_length+=ch; else syn=13; retract(); break; case -:tokenw_length+=ch;ch=inputs_length+;if(ch=-) syn=1414; tokenw_length+=ch; else syn=14; retract(); break; case !: tokenw_length+=ch;ch=inputs_length+;if(ch=) syn=3125; tokenw_length+=ch;else syn=31; retract();break; case =:tokenw_length+=ch;ch=inputs_length+;if(ch=) syn=2525; tokenw_length+=ch; else syn=25; retract(); break; case :syn=17;tokenw_length+=ch;break; case *: syn=15;tokenw_length+=ch;break; case /: syn=16;tokenw_length+=ch;break; case (: syn=27;tokenw_length+=ch;break; case ): syn=28;tokenw_length+=ch;break; case : syn=5;tokenw_length+=ch;break; case : syn=6;tokenw_length+=ch;break; case ;: syn=26;tokenw_length+=ch;break; case : syn=30;tokenw_length+=ch;break; case #: syn=0;tokenw_length+=ch;break; default: syn=-1;tokenw_length+=ch;break; tokenw_length+=0; void main()s_length=0;printf(n -Please Enter Your Words (end with #):-n);doscanf(%c,&ch);inputs_length+=ch;while(ch!=#);s_length=0;printf(-词法分析结果如下:-n);do wordScanAnalyse();/方法调用 switch(syn) case 10:printf(t( %-10d%-10s%12s )n,syn,token,标识符);break;case 11:printf(t( %-10d%-10d%12s )n,syn,sum,数字);break;case -1:printf(t( %-10d%-10s%12s )n,syn,token,不可识别ERROR);printf(- Err

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论