教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

编译原理语法分析实验报告

来源:网络收集 时间:2026-09-08
导读: 编译原理语法分析的实验报告 南华大学 计算机科学与技术学院 实 验 报 告 ( 2007 ~2008 学年度 第二学期 ) 课程名称 实验名称 姓名 专业 地点 寻友旭 软件工程 6—413 学号 20054350227 编译原理 语法分析 班级 软件工程052班 教师 陈星 编译原理语法分析

编译原理语法分析的实验报告

南华大学

计算机科学与技术学院

实 验 报 告

( 2007 ~2008 学年度 第二学期 )

课程名称

实验名称

姓名 专业 地点

寻友旭 软件工程 6—413

学号

20054350227

编译原理 语法分析

班级 软件工程052班

教师

陈星

编译原理语法分析的实验报告

1.实验目的及要求

编制一个递归下降分析程序,实现对词法分析程序所提供得单词序列得语法检查和结构分析。

软件、硬件环境

VC6.0

要求:

利用C语言编制递归下降分析程序,并对简单语言进行语法分析。

待分析的简单语言得语法:

E E+T | E-T | T T T*F | T/F |F

F (E) | i

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“Accept! Right Expression!”,否则输出“Error!!!”。

语法分析:

a) ∵E=>E+T=>E+T*F=>E+T*(E)即有E=>E+T*(E)存在左递归。用直接改写法消除左递归,得到如下: E TE’

E’ +TE’ | TE’|ε T FT’

T’ *FT’ | /FT’|ε F (E) | i

b) 对于以上改进的方法。可得: 对于E’: FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+, ,ε} 对于T’: FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε} 而且: FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i } 由此我们容易得出各非终结符的FOLLOW集合如下: FOLLOW( E )= { ),#}

FOLLOW(E’)= FOLLOW(E)={ ),#}

FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+, ,),#} FOLLOW( T’ ) = FOLLOW( T ) ={+, ,),#}

FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+, ,),#} 由以上FOLLOW集可以我们可以得出SELECT集如下: 对E SELECT(E TE’)=FIRST(TE’)=FIRST(T)={ (,i } 对E’ SELECT(E’ +TE’)={ + } SELECT(E’ TE’)={ } SELECT(E’ ε)={ε,),#} 对T SELECT(T FT’)={(,i}

对T’ SELECT(T’ *FT’)={ * } SELECT(T’ ∕FT’)={ ∕ } SELECT(T’ ε)={ε,+, ,),#} 对F SELECT(F (E) )={ ( } SELECT(F i)={ i }

∴ SELECT(E’ +TE’)∩SELECT(E’ TE’)∩SELECT(E’ ε)= SELECT(T’ *FT’)∩SELECT(T’ ∕FT’)∩SELECT(T’ ε)= SELECT(F (E) )∩SELECT(F i)=

由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。因此,转化后的文法可以用递归下降分析法作语法分析。

编译原理语法分析的实验报告

2.实验步骤

1、 分析试验资料,结合书本得出实验大体思路; 2、 根据资料画出语法分析程序的流程图; 3、 根据流程图与程序大体框架完善程序; 4、 将代码输入电脑中,调试;

5、 根据资料中数据测试程序得基本功能; 6、 根据测试结果,设计测试数据完善程序; 7、 根据实验结果分析总结。

3. 实验内容

词法分析程序的主要子函数模块流程图

\

编译原理语法分析的实验报告

程序:

#include <stdio.h> #include<dos.h> #include<stdlib.h> #include<string.h>

char a[50] ,b[50],d[200],e[10]; char ch;

int n1,i1=0,flag=1,n=5; int total=0;

int E(); int E1(); int T(); int G(); int S(); int F();

void input(); void input1(); void output();

void main() /*递归分析*/ {

int f,p,j=0; char x; d[0]='E'; d[1]='='; d[2]='>'; d[3]='T'; d[4]='G'; d[5]='#';

printf("Please input character string(length<50,end of '#'):\n");

do{

scanf("%c",&ch); a[j]=ch; j++;

}while(ch!='#');

n1=j;

ch=b[0]=a[0];

printf("步骤\t文法\t分析串\t\t分析字符\t剩余串\n");

f=E1();

if (f==0) return; if (ch=='#')

{ printf("\nAccept! Right Expression!\n\n");

编译原理语法分析的实验报告

p=0;

x=d[p];

while(x!='#') {

printf("%c",x);p=p+1;x=d[p]; /*输出推导式*/ } }

else {

printf("\nError!!!\n"); printf("回车返回\n"); getchar();getchar(); return; }

printf("\n");

printf("回车返回\n"); getchar(); getchar(); }

int E1() { int f,t;

printf("%d\tE-->TG\t",total);total++; flag=1;

input(); input1();

f=T();

if (f==0) return(0); t=G();

if (t==0) return(0); else return(1); }

int E()

{ int f,t;

printf("%d\tE-->TG\t",total);total++;

e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#';

output(); flag=1; input(); input1(); f=T();

if (f==0) return(0); t=G();

if (t==0) return(0); else return(1);

编译原理语法分析的实验报告

int T()

{ int f,t;

printf("%d\tT-->FS\t",total);total++;

e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#';

output(); flag=1; input(); input1(); f=F();

if (f==0) return(0); t=S();

if (t==0) return(0); else return(1); }

int G() { int f;

if(ch=='+') { b[i1]=ch;

printf("%d\tG-->+TG\t",total);total++;

e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#';

output(); flag=0; input();

input1();

ch=a[++i1]; f=T();

if (f==0) return(0); G();

return(1);

}

printf("%d\tG-->^\t",total);total++;

e[0]='G';e[1]='=';e[2]='>';e[3]='^';e[4]='#';

output(); flag=1;

input();input1(); return(1); }

int S()

编译原理语法分析的实验报告

int f,t;

if(ch=='*') {

b[i1]=ch;printf("%d\tS-->*FS\t",total);total++;

e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#';

output(); flag=0;

input();input1(); …… 此处隐藏:3474字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理语法分析实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1760218.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)