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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验报告.doc

1、 编译原理实验报告Compilers Principles Experiment Report所在学院: 所在班级:学生姓名: 学 号: 指导教师:教 务 处2015 年 12 月词法分析程序一、实验目的:设计、编制和调试一个具体的词法分析程序,加深对词法分析的理解。二、实验要求:1、通过对 PL/0 词法分析程序(GETSYS)的分析,编制一个具有以下功能的词法分析程序:a.输入为字符串(或待进行词法分析的源程序),输出为单词串,即由(单词,类别)所组成的二元组序列;b.有一定的错误检查能力,例如能发现 2a 这类不能作为单词的字符串。三、实验代码#define ID 12/标识符#defi

2、ne INT 13/常数#define JF 14/界符#define YSF 15/运算符#define N 30/字符读取的最大长度char TOKENN;FILE *write;/查询一个字符串,看其是否与指定的字符相匹配,如果匹配返回 1 个非零的值,如果不匹配,则返回一个 0 值*/int looksame(char *a)int i;char*key22 = “begin“,“end“,“if“,“then“,“else“,“for“,“do“,“while“,“and“,“or“,“not“,“BEGIN“,“END“,“IF“,“THEN“,“ELSE“,“FOR“,“DO“,

3、“WHILE“,“AND“,“OR“,“NOT“ ;for (i = 0;i )out(YSF, “=“);printf(“运算符n“);elsefseek(fp, -1, 1);out(YSF, “);printf(“运算符n“);break;case:ch = fgetc(fp);if (ch = =)out(YSF, “:=“);printf(“运算符n“);elsefseek(fp, -1, 1);out(JF, “:“);printf(“界符n“);break;case/:ch = fgetc(fp);if (ch = *)out(JF, “/*“);printf(“界符n“);wh

4、ile (1)/注释的内容在词法分析中不显示while (ch != /)ch = fgetc(fp);fseek(fp, -2, 1);ch = fgetc(fp);if (ch = *)fseek(fp, 1, 1);break;elsefseek(fp, 2, 1);ch = fgetc(fp);fseek(fp, -2, 1);elsefseek(fp, -1, 1);out(JF, “/“);printf(“界符n“);break;case*:ch = fgetc(fp);if (ch = /)out(JF, “*/“);printf(“界符n“);elsefseek(fp, -1,

5、 1);out(YSF, “*“);printf(“运算符n“);break;case EOF:break;default:error();break;int main()FILE *read;read = fopen(“E:a.txt“, “r“);write = fopen(“E:b.txt“, “a+“);if (read = NULL)printf(“FILE OPEN FAIL!“);exit(0);printf(“=n“);printf(“=词法分析程序=n“);printf(“=该分析程序的文件存放在 E:a.txt 目录下=n“);printf(“=该程序的分析结果存放在 E:

6、b.txt 目录下=n“);printf(“=n“);function(read);fclose(read);system(“pause“);return 0;四、实验截图a.txt b.txt基于 LL(1)方法的语法分析程序1、实验目的设计、编制和调试一个典型的语法分析方法,进一步掌握常用的语法分析方法。二、实验要求1、根据 LL(1)分析法编写一个语法分析程序,可根据自己实际情况,选择以下一项作为分析算法的输入:a.直接输入根据已知文法构造的分析表 M;b.输入文法的 FIRST()和 FOLLOW(U)集合,由 程序自动生成文法的分析表 M;c.输入已知文法,由程序自动构造文法的分析表

7、M。2、程序具有通用性所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为 LL(1)文法。3、有运行实例对于输入的文法和符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子,并要求输出分析过程。三、实验代码#include “stdafx.h“#include#include#include#includechar A20;/*分析栈*/char B20;/*剩余串*/char v120 = i,+,*,(,),# ;/*终结符 */char v220 = E,G,T,S,F ;/*非终结符 */int j = 0, b = 0, top = 0, l;/*L 为输入串长

8、度 */typedef struct type /*产生式类型定义 */char origin; /*大写字符 */char array5; /*产生式右边字符 */int length; /*字符个数 */type;type e, t, g, g1, s, s1, f, f1;/*结构体变量 */type C1010;/*预测分析表 */void print()/*输出分析栈 */int a;/*指针*/for (a = 0;a “, cha.origin);/*输出产生式*/for (j = 0;j= 0;j-)/*产生式逆序入栈*/A+top = cha.arrayj;if (Atop

9、= )/*为空则不进栈*/top-;/*if*/else/*出错处理*/print();print1();printf(“%c 出错n“, x);/*输出出错非终结符*/exit(1);/*else*/*else*/ while (finish = 0);return 0;4、实验截图基于 LR(0)方法的语法分析程序一、实验目的设计、编制和调试一个典型的语法分析方法,进一步掌握常用的语法分析方法。二、实验要求可根据自己实际情况,选择以下一项作为分析算法的输入:(1)直接输入根据己知文法构造的 LR(0)分析表。(2)输入已知文法的项目集规范族和转换函数,由程序自动生成 LR(0)分析表;(3

10、)输入已知文法,由程序自动生成 LR(0)分析表。三、程序代码#include “stdafx.h“#include#include#include#includeusing namespace std;struct stack int top;int st15; /状态栈char sn15; /符号栈*sign;struct analysis /动作表结构char act;int status;action6 = s,5,$,0,$,0, s,4,$,0, $,0,$,0,s,6,$,0, $,0,$,0, A,0,$,0,r,2,s,7, $,0,r,2, r,2,$,0,r,4,r,4,

11、 $,0,r,4, r,4,s,5,$,0,$,0, s,4,$,0, $,0,$,0,r,6,r,6, $,0,r,6, r,6,s,5,$,0,$,0, s,4,$,0, $,0,s,5,$,0,$,0, s,4,$,0, $,0,$,0,s,6,$,0, $,0,s,11,$,0,$,0,r,1,s,7, $,0,r,1, r,1,$,0,r,3,r,3, $,0,r,3, r,3,$,0,r,5,r,5, $,0,r,5, r,5;analysis G = E,3,E,1,T,3,T,1,F,3,F,1; /此文法信息int go3 = 1,2,3,99,99,99,99,99,99,

12、99,99,99,8,2,3,99,99,99,99,9,3,99,99,10,99,99,99,99,99,99,99,99,99,99,99,99;int index(char m) int id;if (m = i) | (m = E) id = 0;else if (m = +) | (m = T) id = 1;else if (m = *) | (m = F) id = 2;else if (m = () id = 3;else if (m = ) id = 4;else if (m = #) id = 5;else id = 99;return id;void main() co

13、ut instri+; while (instri - 1 != #);instri = 0;current = instr;sign-st0 = 0;sign-sn0 = #;sign-sn1 = 0;sign-top = 0;cout st0 sn stsign-top; /couttop += 1;sign-snsign-top = a;sign-sn(sign-top) + 1 = 0;sign-stsign-top = actionix1ia.status;current+;else if (actionix1ia.act = r) iG = actionix1ia.status -

14、 1; /零下表开始back = GiG.status;sign-top -= back;ix2 = sign-stsign-top;ig = index(GiG.act);if (goix2ig != 99) sign-top += 1;sign-stsign-top = goix2ig;sign-snsign-top = GiG.act;sign-sn(sign-top) + 1 = 0;else cout top;i+)cout sti top) sn sn) #include using namespace std;class Transformprivate:char s_stack

15、20;/栈string s_result;/转换之后的字符串,也就是后缀表达式int top;/栈顶public:Transform()top=0;s_stack0=#;s_result=“;void pop()top-;void push(char b)top+;s_stacktop=b;string TF(string a)bool q=0;for (int i=0;is_in;Transform T;s_out=T.TF(s_in);cout“逆波兰表达式为:“s_outendl;system(“pause“);四、实验截图封面设计: 贾丽地 址:中国河北省秦皇岛市河北大街 438 号邮 编:066004电 话:0335-8057068传 真:0335-8057068网 址:http:/

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报