编译原理实验LL1分析法综述 下载本文

内容发布更新时间 : 2024/11/13 8:57:08星期一 下面是文章的全部内容请认真阅读。

编译原理程序设计实验报告

——表达式语法分析器的设计实现

班级:计算机1306班 姓名:王利达

学号:20133959

实验目标:使用LL(1)分析法构造表达式语法分析器程序,判别算术表达式,给出判别结果。

实验内容: 一、概要设计

1.算术表达式文法:

E→ T | Eω0T T→ F | Tω1F F→ i | ( E ) 其中ω0:+ - ω1:* / i:数字或常数 文法变换: E → T M M → ω0 T M |ε T → F | N N → ω1 F N |ε

F → i | ( E ) 其中ω0:+ - ω1:* / i:数字或常数 2.LL(1)分析表

表1.LL(1)分析表 E M T N F ) # i MT,p NF,p ε,n + MT,n - MT,n * NF,n / NF,n ( MT,p NF,p )E,n ) ε,p ε,p ε,n # ε,p ε,p OK

二、数据结构

1.输入表达式

定义char型数组expstr为存放输入表达式的数组,

char expstr[100];

2.分析栈

定义一个栈来进行LL(1)分析。栈中有bottom、top、stacksize等元素,用于程序调用栈和对栈操作。

typedef struct //定义语法的栈 {

SElemType *bottom;//底 SElemType *top;//顶 int stacksize; }SqStack;

(包括:概要设计、数据结构、流程图、关键函数等 有选择填写)

源程序代码:(加入注释)

#include #include #include

using namespace std;

#define STACKSIZE 30 //栈大小 #define STACKINCREMENT 10 //栈增量 #define OK 1 #define Error 0

#define OVERFLOW -1

typedef char SElemType; typedef int Status;

int i=0;

int count1=0;

int count2=0; //计数终结符的个数 char expstr[100];

typedef struct //定义语法的栈 {

SElemType *bottom;//底 SElemType *top;//顶 int stacksize; }SqStack;

Status InitStack(SqStack &S) //初始化栈 {

S.bottom=(SElemType*)malloc(STACKSIZE*sizeof(SElemType)); if(!S.bottom)

exit(OVERFLOW); S.top=S.bottom;

S.stacksize=STACKSIZE;