《编译原理上机实验指导》

《编译原理上机实验指导》

ID:45746671

大小:152.05 KB

页数:9页

时间:2019-11-17

《编译原理上机实验指导》_第1页
《编译原理上机实验指导》_第2页
《编译原理上机实验指导》_第3页
《编译原理上机实验指导》_第4页
《编译原理上机实验指导》_第5页
资源描述:

《《编译原理上机实验指导》》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、《编译原理上机实验指导》实验一词法分析1实验目的设计编制并调试一个词法分析程序,加深对构造词法分析器的原理和技术理解与应用。2实验要求选择一•种计算机高级程序语言子语言,运用恰当的词法分析技术线路,设计和实现其子语言的词法分析器。语言选择,建议为《计算机程序设计》课程所采用的语言。技术线路建议如下两种正则式->NFA->DFA->minDFA-程序设计和止则文法NFA-DFA-minDFA-程序设计。分析器输出结果存入到磁盘文件中。具有出错处理功能。选择子语言方法举例。以教材选取的PASCAL语言为例,确定其子语言涉及的单词类如下:(1)关键

2、字beginendifthenwhiledo(2)运算符和界符:=+_*/<<=<>>>==;():#(3)标识符正则式:BD=letter(letterldigit)*(4)整型常数正则式:NUM=digit(digit)*3算法设计(1)单词种别码设计单词种别码对照表单词符号种别码单词符号种别码begin1■•17If2:=18then3<20while4<>21do5<=22end6>23标识符10>=24整型常数11=25+13■26—14(27*15)28/16#0(1)输出形式设计词法分析器的输入是源程序字符串,输岀是对应的单词串

3、。每个单词按照二元组(种别码,单词符号本身)格式输出。例如:假设源程序为beginx:=9;ifx>0thenx:=2*x+l/3;end#,则诃法分析器对应输出的结果是:(1,begin)(lO,x)(l8,:=)(11,9)(26,;)(2,if)(10,x)(23,>)(11,0)(3,then)(l0,x)(l&:=)(11,2)(15,*)(10,x)(13,+)(11,1)(16,/)(11,3)(26,;)(6,end)(0,#)(2)算法思想依据建立的识别单词的DFA,设计算法,具框架如卜一。具中,①syn存放单词的种别码;©

4、token存放符合标识符规则的单词;③sum存放整型常量的单词。实现技术细节注意的儿个要点:A)标识符和关键字,属于同一构词规则,识别方法是建立一・个关键字表,在识别出标识符单词时,查关键字表,以确认或区别是否是关键字,还是标识符。B)对前导空格符、制表符和换行,均须过滤。详细处理技术请参见陈火旺等编写《程序设计语言编译原理》(第三版);C)约定标识符单词8位冇效。主算法流程图扫描子程序流程图4程序框架#include#includevoidscanner(void);charprog[8]4oken[8

5、],ch;intsyn,p,m,sum;char*rwtab[6]={ubeginM,“then","while",“do","end"};voidmain(void){P=o;printf(upleaseinputstring:M);do{scanner();switch(syn){case11:输出"整型数的二元组";break;case-1:输出“错误";break;default:输出“其它单词的二元组”;}}while(syn);voidscanner(void){for(m=0,n=0;n<8;n++)token[n]=N

6、ULL;ch二读取下一个字符;while(ch==,,)ch=读取下一个字符;if(ch是字符){while(ch是字符或数字符号){ch拼到token;ch二读取下一个字符;}token[m++]=,O,;0退一个输入字符;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n;break;}Jelseif(ch是字符){while(ch是数字符号){sum=sum*10+ch;,0‘;ch二读取下一个字符;}回退一个输入字符;syn=ll;Jelseswitch(ch){ca

7、sey:m=0;token[m++]=ch;ch二读取下一个字符;if(ch==,>,){syn=21;token[m++]=ch;Jelseif(ch=='二'){syn=22;token[m++]=ch;Jelse{syn=20;回退一个输入字符;}break;casem=0;token[m++]=ch;ch二读取下一个字符;if(ch=='='){syn=24;token[m++]=ch;Jelse{syn=23;回退一个输入字符;}break;case:m=0;token[m++]=ch;ch=读取下一个字符;if(ch==,=,){

8、syn=18;token[m++]=ch;)else{syn=25;回退一个输入字符;}break;case,+':syn=13;token[0]=ch;break

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

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

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