资源简介
实现算符优先分析算法,完成以下描述算术表达式的算符优先文法的算符优先分析过程。
G[E]:E→E+T∣E-T∣T
T→T*F∣T/F∣F
F→(E)∣i
说明:终结符号i为用户定义的简单变量,即标识符的定义。
要求:
(1)构造该算符优先文法的优先关系矩阵或优先函数;
(2)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果。
(3)算符优先分析过程应能发现输入串出错。
(4)设计两个测试用例(尽可能完备),并给出测试结果。
代码片段和文件信息
#include“opp.h“
/********************************************
G[E]:E→E+T∣E-T∣
T→T*F∣T/F∣F
F→(E)∣i
/********************************************/
int M[8][8];
int buffer[20];
char str[20];
int S[30];
int point;
int cfw = 0;
int cbw = 0;
void initM(){
M[0][0] = FW; M[0][1] = FW; M[0][2] = FW; M[0][3] = FW; M[0][4] = FW; M[0][5] = FW; M[0][6] = EQ;
M[1][2] = BW; M[1][3] = BW; M[1][4] = BW; M[1][5] = BW; M[1][6] = BW; M[1][7] = BW;
M[2][0] = FW; M[2][1] = FW; M[2][2] = BW; M[2][3] = BW; M[2][4] = FW; M[2][5] = FW; M[2][6] = BW; M[2][7] = BW;
M[3][0] = FW; M[3][1] = FW; M[3][2] = BW; M[3][3] = BW; M[3][4] = FW; M[3][5] = FW; M[3][6] = BW; M[3][7] = BW;
M[4][0] = FW; M[4][1] = FW; M[4][2] = BW; M[4][3] = BW; M[4][4] = BW; M[4][5] = BW; M[4][6] = BW; M[4][7] = BW;
M[5][0] = FW; M[5][1] = FW; M[5][2] = BW; M[5][3] = BW; M[5][4] = BW; M[5][5] = BW; M[5][6] = BW; M[5][7] = BW;
M[6][2] = BW; M[6][3] = BW; M[6][4] = BW; M[6][5] = BW; M[6][6] = BW; M[6][7] = BW;
M[7][0] = FW; M[7][1] = FW; M[7][2] = FW; M[7][3] = FW; M[7][4] = FW; M[7][5] = FW; M[7][7] = EQ;
}
int mach(int nowint point){
switch(M[now][buffer[point]]){
case FW:cfw++;return 1;
case BW:
if(cbw cbw++;
return 2;
}
else{
printf (“find error in %c\n“str[point]);return 0;
}
case EQ:return 0;
default:printf (“find error in %c\n“str[point]);return 0;
}
}
int analysis(){
S[0] = SHARP ;
int count = 1;
int spoint = 0;
int revalue;
int now = S[spoint];
while(count!=0){
revalue = mach(nowpoint);
switch(revalue){
case 1:
S[count] = buffer[point];
spoint = count;
count++;point++;
now = S[spoint];
break;
case 2:
if(count==spoint+1){
spoint--;
now = S[spoint];
}
else{
count = count-2;
spoint=count-2>0?count-2:0;
now = S[spoint];
}
break;
default: return 0;
}
}
return 0;
}
void main(){
FILE *input;
input = fopen(“test1.txt““rb“);
if (!input){
cout << “cannot open test.txt.“ << endl;
}
else{
initM();
cout << “open file “ << endl;
//cout << “open “ << file << endl;
int i = 0j = 0;
point = 0;
char c;
while(!feof(input))
{
c = fgetc(input);
if(c==‘(‘){
c = fgetc(input);
buffer[i] = (int)c-48;
cout << buffer[i];
i++;
c = fgetc(input);
if(c==‘‘){
c = fgetc(input);
str[i-1] = c;
//cout << str[i-1];
}
}
}
analysis();
//cout < if(point!=i-1){
printf(“\nDidn‘t match %s \n“str);
}
else
printf(“\nmatch %s \n“str);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 530 2012-04-19 09:12 opp.h
文件 30 2012-04-21 22:36 test1.txt
文件 35 2012-04-21 01:06 test2.txt
文件 2642 2012-04-19 12:33 opp.cpp
相关资源
- PL0编译器源程序分析
- 编译原理实验报告分析PL0词法分析程
- 编译原理课程设计布尔表达式的语法
- 编译原理课设——最终课设
- 天津大学编译原理资料.zip
- 《编译原理》第二版高清带书签
- 龙书虎书鲸书 编译原理 中文版
- 编译原理23-30
- 编译原理与技术第二版高清pdf含目录
- 编译原理,语法分析,词法分析器,
- 编译原理实验报告语法分析 递归下降
- 哈工大编译原理大作业
- 两周自制脚本语言_PDF电子书 带书签目
- 编译原理及编译程序构造第二版东南
- 燕山大学编译原理实验报告.doc
- 编译原理课设 词法分析、语法分析、
- 安大编译原理试卷
- 编译原理语法分析、词法分析源代码
- 编译原理---课程实验
- 编译原理,词法分析,语法分析,四
- LL(1)文法分析器
- 算符优先分析程序
- 编译原理实验 语法分析 递归下降分析
- 编译原理课程设计LL(1)分析过程模
- 编译原理语义分析实验源代码
- 燕山大学软件工程编译原理实验报告
- hit编译原理·词法分析
- 编译原理中采用递归下降子程序方法
- 编译原理词法、语法、语义分析实验
- 编译原理实验五:有穷自动机的确定
评论
共有 条评论