ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:31.90KB ,
资源ID:19010754      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19010754.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理实验报告Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理实验报告Word格式文档下载.docx

1、 /false表示当前字符未处于注释中。 while(cinf.read(&cur_c,sizeof(char) /从文件读一个字符 switch(in_comment) case false: if(old_c=/ & cur_c=*) /进入多行注释 i-; /去除已存入扫描缓冲区的字符 in_comment=true; else if(old_c=) /进入行注释p=1; /去除已存入扫描缓冲区的字符 else n) /发现续行 i-; else if(cur_c=A cur_cstdlib.hconio.hconst short WORDLEN=20;struct code_val c

2、har code;char valWORDLEN;/单词编码表const char code=ac=+$*,;()#/DFA列字符const char COL_CHAR=a0=+*,;()# /状态转换矩阵(DFA)const int DFA11=/strlen()=11 1,2,3,4,5,6,7,8,9,10,0,11,11,0,12,0,0,0,0,13,0,0,0,0,0,0,11,11, 0,12,0/预处理函数原型/扫描函数原型code_val scanner(char *);/主函数void main() char buf4048=/扫描缓冲区/预处理/显示bufcout/单词识

3、别 code_val t;/临时变量 do t=scanner(buf);/调用一次扫描器获得一个单词二元式 coutt.codet.valacz)c=09/ const char COL_CHAR= for(int i=0;iexit(0); /程序终止运行 /预处理函数void pro_process(char *buf) ifstream cinf( int i=0;char old_c=/计数器,前一个字符,当前字符。/状态标志,false表示当前字符未处于注释中。cur_c,sizeof(char)/从文件读一个字符)/进入注释/去除已存入扫描缓冲区的字符) /去除续行符,包括后续换

4、行符。 else ) cur_c+=32; if(cur_c= | cur_c=) cur_c=/空格 bufi+=cur_c ;)/离开注释/保留前一个字符 bufi=输入内容在source.txt中,如下:egin/*S=2*3.14*R*R+2*3.14*R*H*/14*r*(r+h) kmoiulEnd NULc NULi r, NULi hi s NUL= NULx 2* NULx 314( NUL$ NUL+ NUL) NULi kmoiul NUL# NUL实验三在自上而下预测分析控制程序的基础上,根据文法规则进行语法分析,如字串是句子,写出文法的最左推导。根据表达式文法的预测分

5、析表,对输入的符号串进行分析。输入的符号串需是单词二元式。若产生式匹配,则输出产生式。X 存放当前栈顶符号的工作单元,当X是终结符时,读入下一个符号;当X是非终结符时,判断其是否为#,若不是,则判断其MX,a是否是产生式(匹配),匹配则逆序出栈,然后按最左推导输出。具体代码如下:for(i=strlen(pMlin(X)col(t.code)-1;i=0;i)stack+top=*(pMlin(X)col(t.code)+i);XpMlin(X)col(t.code)t.codet.val; /读一个单词的二元式 char stack20=,Eint top=1; /栈赋初值 char X=

6、/用于显示,并非必要。stepstackXt.code /用于显示,并非必要。j) /用于显示,并非必要。 while(1) for(i=0;=top;i+) coutstacki;/用于显示,并非必要。 X=stacktop-; /出栈+j /用于显示,并非必要。 /用于显示,并非必要。 if(X=) if(X=t.code)couttAccbreak; /跳出循环 elsecout /end of if(X=) if(isT(X) /是否是终结符 if (X= t.code) cinf /读下一单词二元式Err in T continue;/end of if(isT(X) if(isNT

7、(X) /是否是非终结符 if(Mlin(X)col(t.code)=-1) cout elsefor(i=strlen(pMlin(X)col(t.code)-1;i-) stack+top=*(pMlin(X)col(t.code)+i);/end of if(isNT(X)Err in main( )/end of while/end of mainint lin(char c) /将EDTSF分别转换为01234 for(int i=0;(int)strlen(NT); if(c=NTi)return i;Err in lin( ) int col(char c) /将+* ()ixy

8、#分别转换为01234567or(int i=0;(int)strlen(T);i+)if(c=Ti)return i;Err in col( )bool isNT(char c) /是否是非终结符for(int i=0;i+) if(c=NTi)return true;return false;bool isT(char c) /是否是终结符(不包括)(int)strlen(T)-1;i+)if(c=Ti)return true;文件lex_r.txt输入数据,如下:i a + nul i b # nul结果输出至文件par_r.txt,如下:step stack X t.code0) #E

9、 i1) # E iE-TD #DT i2) #D T iT-FS #DSF i3) #DS F iF-i #DSi i4) #DS i i #DS +5) #D S +S- #D +6) # D +D-+TD #DT+ +7) #DT + +8) #D T i9) #DS F i10) #DS i i #DS #11) #D S # #D #12) # D # # #13) # # Acc实验四 在LR语法分析器的控制程序的基础上,添加语义栈,在对字符串进行分析的同时,也翻译字符串。当action /读一单词 int action; /输出时使用的计数器,并非必要。状态栈符号栈输入符号/ doj+ /输出

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1