编写词法分析程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
课程名称:编译原理__ 项目名称:编写词法分析程序
姓名:专业:计算机科学与技术_ 班级:2011级学号:同组成员:
1注:1、实验准备部分包括实验环境准备和实验所需知识点准备。

2、若是单人单组实验,同组成员填无。

二、实验过程记录2:
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<语句>]
扩充条件语句的语法图为:
2注:实验过程记录要包含实验目的、实验原理、实验步骤,页码不够可自行添加。

(3)增加repeatT语句,格式为:
<复合语句> ::= repeat<语句>UNTL<条件>
扩充repeat语句的语法图为:
源程序代码:
#include<stdio.h>
#include<string.h>
inti,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","defin e","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;
k<38;
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;
运行结果:
3注:1、实验小结应包含实验所需知识点和实验方法的总结,实验心得体会等。

2、分组实验需包含同组讨论内容。

实验报告成绩(百分制)__________ 实验指导教师签字:__________。

相关文档
最新文档