网站大量收购闲置独家精品文档,联系QQ:2885784924

编译原理实验一.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验一

一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。二、基本知识1、正则表达式2、正则表达式到有限自动机的转换3、有限自动机的确定化与最小化三、实验环境1、Windows操作系统2、C/C++/Java语言四、实验要求1、做好实验预习,掌握并熟悉本实验中所使用的编程、测试环境及相应的软件2、写出实验报告五、实验内容1、待分析的C语言子集的词法1) 关键字 main if else int return void while (都是小写)2) 专用符号 = + — * / = = = = != ; : ,{ } [ ] ( )3) 其他标记 STRING::= [^]* ID::=letter(letter|digit)* INT::=digit digit* letter::= a|…|z|A|…|Z digit::= 0|…|94)空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。2、部分单词符号对应的种别码单词符号种别码 单词符号种别码main1:17int2:=18reture320if421else5=22end623lettet(letter|digit)*10=24dight dight*11=25+13;26—14(27{15)28}16#03、词法分析程序的功能输入:所给文法的源程序字符串输出:二元组(syn, token或sum)构成的序列。其中syn 为单词种别码;token 为存放的单词自身字符串;sum为整型常量(作为常量的值)。实现时,可将单词的二元组用结构进行处理设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。4 程序源代码#include stdio.h#include string.hchar prog[80],token[8],ch;int syn,p,m,n,sum;char *rwtab[6]={main,int,return,if,else,end};void scaner();main(){p=0; printf(\n please input a string(end with #):/n); do{ scanf(%c,ch); prog[p++]=ch; } while(ch!=#); p=0; do{ scaner(); switch(syn) {case 11:printf(( %-10d%5d )\n,sum,syn); break; case -1:printf(you have input a wrong string\n); return 0 ; default: printf(( %-10s%5d )\n,token,syn); break; } }while(syn!=0); return 0; }//扫描查找函数 void scaner() { sum=0; for(m=0;m8;m++)token[m++]=NULL; ch=prog[p++]; m=0; while((ch== )||(ch==\n))ch=prog[p++]; if(((ch=z)(ch=a))||((ch=Z)(ch=A))) { while(((ch=z)(ch=a))||((ch=Z)(ch=A))||((ch=0)(ch=9))) {token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch=0)(ch=9)) { while((ch=0)(ch=9)) { sum=sum*10+ch-0; ch=prog[p++]; } p--; syn=11; } else switch(ch) { case :token[m++]=ch; ch=prog[p++]; if(ch===) { syn=22; token[m++

文档评论(0)

juhui05 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档