编译原理实验报告四资料

编译原理实验报告

题 目 表达式语法分析程序的构造 学 院 专 业 班 级 学 号 学生姓名 指导教师

西安思源学院教务处制

二〇一 年

实验四 表达式语法分析程序的构造

一、实验目的

1掌握C++语言编译的语法分析程序

2分别掌握LL(1)、算符优先、LR等语法分析方法的构造。

二、实验环境

Microsoft Visual C++ 6.0

三、实验内容

给定某一文法,试构造其简单优先矩阵(或LL(1)矩阵),并编制程序。 给出相应句子的语法分析过程,判其正确性。 例如:给定文法G: E→T E1 E1→+TE1/ε T→FT1 T1→*F/ε F→id/(E)

(1)先构造其SELECT集合,判定其是否为LL(1)文法 (2)是则构造其分析表

(3)给出句子id+id*id$的语法分析过程

四、设计说明

LL(1):

#include #include typedef int datatype; char a[N3]={'$','E'};

char c[N4]={'$','z','*','z','+','z'}; char *B[N1][N2]={

};

\\\\\

\

void FXB() { int i,j;

cout<<\分析表为: \for(i=0;i

for(j=0;j

}

cout<

char *w[5]={\ cout<<\文法为: \ for(s=0;s<5;s++) }

void SELECT() { }

void showa() { int i;

cout<<\分析栈为:\

for(i=0;i

{if(a[i]!=0) cout<

cout<<\集合为:\

cout<<\cout<<\

cout<<\cout<<\cout<<\cout<<\ cout<<\cout<<\cout<<\为LL(1)文法\{cout<

void showb() { int j; } void FX() {

cout<<\分析如下:\

showa();showb(); int i,j,m,n;

i=I();j=J();m=M();n=N(); while(a[m]!='$') {

cout<<\输入流为:\for(j=0;j

cout<

cout<

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4