欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    编译原理词法分析程序的设计实验报告.doc

    • 资源ID:4296260       资源大小:290.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理词法分析程序的设计实验报告.doc

    编译原理词法分析程序设计实验报告【实验目的】1 了解词法分析的主要任务。2 熟悉编译程序的编制。【实验内容】根据某文法,构造一基本词法分析程序。找出该语言的关键字、标识符、整数以及其他一些特殊符号,给出单词的种类和值。【实验要求】1. 构造一个小语言的文法类C小语言文法(以EBNF表示) <程序>:=<分程序><分程序> . <分程序>:=<标识符>(<变量说明部分>,<变量说明部分>)<函数体> <变量说明部分>:=int<标识符>,<标识符> <函数体>:=<变量说明部分><语句序列> <语句序列>:=<语句序列><语句>|<语句> <语句>:=<赋值语句>|<条件语句>|<循环语句>|<函数调用语句> <赋值语句>:=<标识符>=<表达式> <表达式>:=+|-<项><加法运算符><项> <项>:=<因子><乘法运算符><因子> <因子>:=<标识符>|<无符号整数> <加法运算符>:= +|- <乘法运算符>:= *|/ <条件语句>:=if<条件><语句序列>else<语句序列> <条件>:=<表达式><关系运算符><表达式> <关系运算符>:= =|!=|>|<|>=|<= <循环语句>:=for(<表达式><条件><表达式>) <语句序列> <函数调用语句>:=<标识符>(<标识符>,<标识符>|<空>) <标识符>:=<字母><字母>|<数字> <无符号整数>:=<数字><数字> <字母>:=a|b|c|X|Y|Z <数字>:=0|1|2|8|9单词分类情况关键字:int if else for标识符:以字母开头的字母和数字的组合关系运算符: =|!=|>|<|>=|<=加法运算符:+|- 乘法运算符: *|/界符:,; ( )2. 设计单词的输出形式,单词的种类和值的表示方法种别码 单词值如:1 int3. 编写词法分析程序cffx.c实现基本的词法分析器,能够分析关键字、标识符、数字、运算符(需要有“=”或“:=”之类需要超前搜索的运算符)以及其他一些符号。/ 编译原理词法分析程序.cpp #include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct wordsint id;char name20;char value20;word;char integer20='i','n','t'char iff20='i','f'char elsee20='e','l','s','e'char forr20='f','o','r'int main()char code10000;char words20,ch;int i,j,p,count,n,m;int k=0;word symbol500; printf("种别码:1 类别:关键字intn"); printf("种别码:2 类别:关键字ifn"); printf("种别码:3 类别:关键字elsen"); printf("种别码:4 类别:关键字forn"); printf("种别码:5 类别:标识符n"); printf("种别码:6 类别:计算运算符n"); printf("种别码:7 类别:关系运算符n"); printf("种别码:8 类别:界符n");while(1)gets(code);n=strlen(code);for(m=0,j=0;m<n;m+) if(codem>='a'&&codem<='z')|(codem>='0'&&codem<='9') wordsj=codem;j+; else if(words0='i'&&words1='n'&&words2='t'&&words3='0') symbolk.id=1; for(i=0;i<20;i+) symbolk.valuei=wordsi; k+; else if(words0='i'&&words1='f'&&words2='0') symbolk.id=2; for(i=0;i<20;i+) symbolk.valuei=iffi; k+; else if(words0='e'&&words1='l'&&words2='s'&&words3='e'&&words4='0') symbolk.id=3; for(i=0;i<20;i+) symbolk.valuei=elseei; k+; else if(words0='f'&&words1='o'&&words2='r'&&words3='0') symbolk.id=4; for(i=0;i<20;i+) symbolk.valuei=forri; k+; else symbolk.id=5; for(i=0;i<20;i+) symbolk.valuei=wordsi; k+; for(p=0;p<20;p+) wordsp=0; j=0; if(codem='+') symbolk.id=6; symbolk.value0='+' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='-') symbolk.id=6; symbolk.value0='-' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='*') symbolk.id=6; symbolk.value0='*' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='/') symbolk.id=6; symbolk.value0='/' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='='&&codem+1!='=') symbolk.id=6; symbolk.value0='=' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='='&&codem+1='=') symbolk.id=7; symbolk.value0='=' symbolk.value1='=' for(i=2;i<20;i+) symbolk.valuei=0; k+; m+; if(codem='!'&&codem+1='=') symbolk.id=7; symbolk.value0='!' symbolk.value1='=' for(i=2;i<20;i+) symbolk.valuei=0; k+; m+; if(codem='>'&&codem+1='=') symbolk.id=7; symbolk.value0='>' symbolk.value1='=' for(i=2;i<20;i+) symbolk.valuei=0; k+; m+; if(codem='<'&&codem+1='=') symbolk.id=7; symbolk.value0='<' symbolk.value1='=' for(i=2;i<20;i+) symbolk.valuei=0; k+; m+; if(codem='>') symbolk.id=7; symbolk.value0='>' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='<') symbolk.id=7; symbolk.value0='<' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem=',') symbolk.id=8; symbolk.value0=',' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='') symbolk.id=8; symbolk.value0='' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='(') symbolk.id=8; symbolk.value0='(' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem=')') symbolk.id=8; symbolk.value0=')' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='') symbolk.id=8; symbolk.value0='' for(i=1;i<20;i+) symbolk.valuei=0; k+; if(codem='') symbolk.id=8; symbolk.value0='' for(i=1;i<20;i+) symbolk.valuei=0; k+; count=k; system("cls"); for(i=0;i<count;i+) printf("%d ",symboli.id); printf("%sn",symboli.value); return 0;4.生成并输出单词符号表识别单词的状态转换图:5.流程图6.源程序清单int a,b,c;a=b+c;7.测试结果8.实验心得:此次实验让我了解了如何设计、编制并调试词法分析程序,并加深了我对词法分析器原理的理解;熟悉了直接构造词法分析器的方法和相关原理,并学会使用c语言直接编写词法分析器;同时更熟练的掌握用c语言编写程序,实现一定的实际功能。通过本次实验,使我更深层次的掌握了词法分析。从刚开始的无从下手到后来渐渐的突破了各个难关,虽然花了大量的时间和精力,但在我看来这绝对是值得的。起码让我明白了,光有理论是苍白无力的,我们必须将他附注于实践才能升华。

    注意事项

    本文(编译原理词法分析程序的设计实验报告.doc)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开