编写词法分析程序.docx

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

实验报告课程名称:编译原理__ 项目名称:编写词法分析程序?姓名: 专业: 计算机科学与技术_ 班级:2011级 学号:同组成员: 实验准备: 1、实验环境: 软件环境:visual C++ 6.0 硬件环境:计算机一台 2、实验所需知识点: 1、词法分析是编译的第一个阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。2、词法分析程序的功能是读入源程序,输出单词符号。单词符号是一个程序设计语言的基本语法符号。程序设计语言的单词符号一般可分成下列5种:(1)关键字,也称基本字,如Pascal语言中的begin、end、if、while和var等。(2)标示符,用来表示各种名字,如常量名、变量名和过程名等。(3)常数,各种类型的常数,如25、3.1415、TRUE、、和“ABC”。(4)运算符,如+,*,=等。(5)界符,如逗点、括号等。 3、程序设计语言中的单词是基本语法符号。单词的语法可以用有效的工具加以描述,并且基于这类描述工具,可以建立词法分析技术,进而可以建立词法分析程序的自动构造方法。多数程序设计语言的单词的语法都能用正规文法或3型文法来描述。二、实验过程记录: 1、实验目的给出PL/0文法规范,要求编写PL/0语言的词法分析程序,深刻理解词法分析的整个过程,提高词法分析方法的实践能力 2、实验内容对PL/0语言作如下功能扩充:(1)扩充条件语句的功能使其为:if条件then 语句[else 语句](2)增加repeat语句,格式为:repeat语句{;语句}until条件3、实验要求要求:(1)给出扩充后的语法图和EBNF的语法描述。(2)修改PL/0的编译系统,使它能正确编译扩充后的PL/0程序。4、实验步骤:(1)整型一维数组,数组的定义格式为:VAR数组标识名(下界:上界)其中上界和下界可以是整数或者常量标识名。访问数组元素的时候,数组下表是整型的表达式,包括整数、常量或者变量和他们的组合。(2)扩充条件语句,格式为:条件语句?::=?IF条件THEN语句 [ELSE语句]扩充条件语句的语法图为:(3)增加repeatT语句,格式为:复合语句?::=?repeat语句UNTL条件扩充repeat语句的语法图为:源程序代码:#includestdio.h#includestring.hinti,j,k,sign,number,flag,run,sum,autuor;charch;charwords[10]={};charprogram[500];intScan(charprogram[]){char*keywords[39]={auto,default,do,extern,goto,int,short,static,struct,switch,typedef,void,break,case,char,const,continue,double,else,enum,float,for,if,long,register,return,signed,zhaixinyuan,sizeof,union,unsigned,volatile,while,main,printf,scanf,include,define,string};number=0;flag=0;j=0;ch=program[i++];while((ch==)||(ch==\r)||(ch==\n))ch=program[i++];if((ch=a)(ch=z)){while((ch=a)(ch=z)){words[j++]=ch;ch=program[i++];}i--;words[j++]=\0;for(k=0;k38;k++)if(strcmp(words,keywords[k])==0)keywords[k])==0{sign=k+1;flag=1;if(k==27)autuor=1;break;}if(flag==0){sign=100; }}elseif((ch=0)(ch=9)){number=0;while((ch=0)(ch=9)){number=number*10+(ch-0);ch=program[i++];}sign=200;i--;}elseswitch(ch){case=:{if(ch===)words[j++]=ch;words[j]=\0;ch=program[i++];if(ch===){words[j++]=ch;words[j]=\0;sign=401;/*==*/}else{i--;sign=402;/*=*/}break;}case:{if(ch==)words[j++]=ch;words[j]=\0;ch=program[i++];if(ch===){words[j+

文档评论(0)

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

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

1亿VIP精品文档

相关文档