内容发布更新时间 : 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
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;