当前位置:首页 > 教学设计 > 编译原理实验二【编译原理实验一】
 

编译原理实验二【编译原理实验一】

发布时间:2019-07-20 11:15:36 影响了:

华中师范大学

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) peak;

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

switch(syn) {

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

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

}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; peak; } }

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"; peak;

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;

peak;

}

}

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";

peak;

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

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

{

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

读入begin

x:=9;

if x>0

then

x:= 2*x + 1/3;

? end #:

输出结果:

七.小结

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

八.参考文献

编译原理教

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3