编译原理实验一

华中师范大学

CHINA 题 目: 院 班 级:姓 名:学 号:指导老师:NORMAL UNIVERSITY

0701

CENTRAL

一.实验题目

词法分析 二.实验目的

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 三.实验内容

输入: 对所给文法的源程序字符串。

输出: 二元组(syn, token或 sum)构成的序列。 其中: syn 为单词自身字符串; token为存放的单词自身字符串; sum为整形常数。 四.实验步骤

1.进行算法分析

2.编写程序

3.测试程序

4.进行调试

5.写实验报告

五.实验设计思想

六.实现代码

#include #include #include

void scaner();

char prog[80] , token[8];

int syn, p, m, n, sum, i, len;

char *rwtab[6]={"begin", "if", "then","while","do", "end"};

int main() {

FILE *f1;

f1=fopen("read.txt","rt"); do {

fgets(prog, 80,f1); len=strlen(prog); prog[len-1]=0; p=0; do {

scaner(); if(syn==-1) {

if(prog[p]==0) break;

else if(prog[p++]==9) continue; }

switch(syn) {

case 11: printf("(%d, %d)\n",syn,sum);break; case -1: printf("error\n"); p++;break; default: printf("(%d, %s)\n",syn,token); }

}while(syn && prog[p]); if(syn==0) break;

}while(!feof(f1)); fclose(f1); return 0; }

void scaner() {

m=0; sum=0;

memset(token,0, sizeof(token)); while(prog[p]==' ') p++;

if(prog[p]>='a' && prog[p]='A' && prog[p]

{

while(prog[p]>='a' && prog[p]='A' && prog[p]='0' && prog[p]

for(n=0; n

if(strcmp(token,rwtab[n])==0) {

syn=n+1; break; } }

else if(prog[p]>='0' && prog[p]

while(prog[p]>='0' && prog[p]

sum=sum*10 + prog[p] - '0'; p++; }

syn=11; }

else

switch(prog[p]) {

case '') {

syn=21;

token[m++]=prog[p++]; }

else if(prog[p]=='=') {

syn=22;

token[m++]=prog[p++]; }

else

syn=20; token[m]='\0'; break;

case '>': token[m++]=prog[p++]; if(prog[p]=='=') {

{

while(prog[p]>='a' && prog[p]='A' && prog[p]='0' && prog[p]

token[m++]=prog[p++];

token[m]='\0';

syn=10;

for(n=0; n

if(strcmp(token,rwtab[n])==0)

{

syn=n+1;

break;

}

}

else if(prog[p]>='0' && prog[p]

{

while(prog[p]>='0' && prog[p]

{

sum=sum*10 + prog[p] - '0';

p++;

}

syn=11;

}

else

switch(prog[p])

{

case '

if(prog[p]=='>')

{

syn=21;

token[m++]=prog[p++];

}

else if(prog[p]=='=')

{

syn=22;

token[m++]=prog[p++];

}

else

syn=20;

token[m]='\0';

break;

case '>': token[m++]=prog[p++];

if(prog[p]=='=')

{

} } syn=24; token[m++]=prog[p++]; } else syn=23; token[m]='\0'; break; case ':': token[m++]=prog[p++]; if(prog[p]=='=') { syn=18; token[m++]=prog[p++]; } else syn=17; token[m]='\0'; break; case '+': syn=13; token[0]=prog[p++]; break; case '-': syn=14; token[0]=prog[p++]; break; case '*': syn=15; token[0]=prog[p++]; break; case '/': syn=16; token[0]=prog[p++]; break; case '=': syn=25; token[0]=prog[p++]; break; case ';': syn=26; token[0]=prog[p++]; break; case '(': syn=27; token[0]=prog[p++]; break; case ')': syn=28; token[0]=prog[p++]; break; case '#': syn=0; token[0]=prog[p++]; break; default: syn=-1;

读入begin

x:=9;

if x>0

then

x:= 2*x + 1/3;

? end #:

输出结果:

七.小结

这个程序其实就简和单的单词统计的问理论知识里面的大不相同,通过对这个程序的写我了解了相关的知识

八.参考文献

编译原理教

华中师范大学

CHINA 题 目: 院 班 级:姓 名:学 号:指导老师:NORMAL UNIVERSITY

0701

CENTRAL

一.实验题目

词法分析 二.实验目的

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 三.实验内容

输入: 对所给文法的源程序字符串。

输出: 二元组(syn, token或 sum)构成的序列。 其中: syn 为单词自身字符串; token为存放的单词自身字符串; sum为整形常数。 四.实验步骤

1.进行算法分析

2.编写程序

3.测试程序

4.进行调试

5.写实验报告

五.实验设计思想

六.实现代码

#include #include #include

void scaner();

char prog[80] , token[8];

int syn, p, m, n, sum, i, len;

char *rwtab[6]={"begin", "if", "then","while","do", "end"};

int main() {

FILE *f1;

f1=fopen("read.txt","rt"); do {

fgets(prog, 80,f1); len=strlen(prog); prog[len-1]=0; p=0; do {

scaner(); if(syn==-1) {

if(prog[p]==0) break;

else if(prog[p++]==9) continue; }

switch(syn) {

case 11: printf("(%d, %d)\n",syn,sum);break; case -1: printf("error\n"); p++;break; default: printf("(%d, %s)\n",syn,token); }

}while(syn && prog[p]); if(syn==0) break;

}while(!feof(f1)); fclose(f1); return 0; }

void scaner() {

m=0; sum=0;

memset(token,0, sizeof(token)); while(prog[p]==' ') p++;

if(prog[p]>='a' && prog[p]='A' && prog[p]

{

while(prog[p]>='a' && prog[p]='A' && prog[p]='0' && prog[p]

for(n=0; n

if(strcmp(token,rwtab[n])==0) {

syn=n+1; break; } }

else if(prog[p]>='0' && prog[p]

while(prog[p]>='0' && prog[p]

sum=sum*10 + prog[p] - '0'; p++; }

syn=11; }

else

switch(prog[p]) {

case '') {

syn=21;

token[m++]=prog[p++]; }

else if(prog[p]=='=') {

syn=22;

token[m++]=prog[p++]; }

else

syn=20; token[m]='\0'; break;

case '>': token[m++]=prog[p++]; if(prog[p]=='=') {

{

while(prog[p]>='a' && prog[p]='A' && prog[p]='0' && prog[p]

token[m++]=prog[p++];

token[m]='\0';

syn=10;

for(n=0; n

if(strcmp(token,rwtab[n])==0)

{

syn=n+1;

break;

}

}

else if(prog[p]>='0' && prog[p]

{

while(prog[p]>='0' && prog[p]

{

sum=sum*10 + prog[p] - '0';

p++;

}

syn=11;

}

else

switch(prog[p])

{

case '

if(prog[p]=='>')

{

syn=21;

token[m++]=prog[p++];

}

else if(prog[p]=='=')

{

syn=22;

token[m++]=prog[p++];

}

else

syn=20;

token[m]='\0';

break;

case '>': token[m++]=prog[p++];

if(prog[p]=='=')

{

} } syn=24; token[m++]=prog[p++]; } else syn=23; token[m]='\0'; break; case ':': token[m++]=prog[p++]; if(prog[p]=='=') { syn=18; token[m++]=prog[p++]; } else syn=17; token[m]='\0'; break; case '+': syn=13; token[0]=prog[p++]; break; case '-': syn=14; token[0]=prog[p++]; break; case '*': syn=15; token[0]=prog[p++]; break; case '/': syn=16; token[0]=prog[p++]; break; case '=': syn=25; token[0]=prog[p++]; break; case ';': syn=26; token[0]=prog[p++]; break; case '(': syn=27; token[0]=prog[p++]; break; case ')': syn=28; token[0]=prog[p++]; break; case '#': syn=0; token[0]=prog[p++]; break; default: syn=-1;

读入begin

x:=9;

if x>0

then

x:= 2*x + 1/3;

? end #:

输出结果:

七.小结

这个程序其实就简和单的单词统计的问理论知识里面的大不相同,通过对这个程序的写我了解了相关的知识

八.参考文献

编译原理教


相关内容

  • [编译原理]实验教学大纲
  • <编译原理>课程实验教学大纲 1.实验课程号: 20013B3sy 2.课程属性:必修 3.实验属性:非独立设课 4.学时学分: 12学时 5.实验应开学期:秋季 6.先修课程:C 语言FORTRAN 语言或PASCAL 语言,汇编语言,数据结构,离散数学等. 一.课程的性质与任务 本课 ...

  • 张瑞编译原理实验报告
  • 黑龙江大学 "编译原理课程设计"读书报告 学院 年级 专业 学号 姓名 报告日期 成绩 软件学院 2012级 软件工程 20122515 张瑞 2014年6月28日 黑龙江大学计算机科学技术学院 黑龙江大学软件学院 概述 "编译原理"课程是计算机专业中一门重要 ...

  • 编译原理课程设计心得体会
  • 经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计.通过该课程设计,收获颇多. 一.对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程.构造工具及其相关的技术对课本上的知 ...

  • [嵌入式系统设计]实验指导书-
  • 电子科技大学 微机课程组 嵌入式系统设计 实验指导书 2015年9月 目录 第一部分嵌入式系统仿真实验系统简介 1 第一节.开发平台软件资源及文档 1 第二节.开发平台软件安装 第二部分 实验项目说明 第一节.实验项目列表 第二节.实验项目使用建议 第三部分 嵌入式开发系统实验案例指导 实验一.多任 ...

  • 超前进位加法器的设计
  • 沈阳航空工业学院 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:超前进位加法器的设计 院(系):计算机学院 专 业:计算机科学与技术 班 级:4401102 学 号:[1**********]6 姓 名:郭丰瑞 指导教师:刘泽显 完成日期:2006年12月31日 目 录 ...

  • 微机原理实验箱使用说明项目版
  • 目录 第一章 简介 .................................................................... 4 1.1 实验仪介绍 ........................................................... ...

  • 编译原理实验指导书(2015)
  • LIAOCHENG UNIVERSITY 编译原理 实验指导书 聊城大学计算机学院 2011年3月 目 录 <编译原理>课程实验教学大纲 ............................. 1 实验一 词法分析器的设计 .............................. ...

  • 乐曲演奏电路
  • 指导教师: 日 期: <EDA 技术与VHDL 语言设计> 课程设计 题 目: EDA技术及其应用 --乐曲演奏电路 姓 名: 陈 院 系: 电子信息工程学系 专 业: 电子信息工程 班 级: 电信092 学 号: 910706220 指导教师: 余尤好 2011年 12 月 EDA 技 ...

  • 词法分析程序的构造
  • 通达学院 题 专 学 班 指 指 日II 词法分析程序的构造 业 生 姓 名 级 学 号 导 教 师 导 单 位 计算机学院计算机科学与技术系 期 专业课程设计目: 词法分析程序的构造 一. 课题内容和要求 通过状态转换图构造C或者PASCAL语言子集的词法分析程序. 原理解析:选取语言,例如选取了 ...