编译原理实验四——算符优先文法语法分析
来源:互联网 发布:dedecms美女图片源码 编辑:程序博客网 时间:2024/04/28 00:31
[实验任务]
1、实现算符优先分析算法。
2、完成以下描述算术表达式的算符优先文法的算符优先分析过程。
G[E]:E→E+T∣E-T∣T
T→T*F∣T/F∣F
F→(E)∣i
说明:终结符号i为用户定义的简单变量,即标识符的定义。
[设计要求]
1、构造该算符优先文法的优先关系矩阵或优先函数;
2、输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果。
3、算符优先分析过程应能发现输入串出错。
4、设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。
main() { push('#'); if (strcmp(stack, "#A#") == 0) { fclose(in); return 0;
memset(stack, '/0', sizeof(stack));
char buffer[100];
char a = 0;
int tail_buffer = -1, head_buffer = -1;
int tail_stack = 0, head_stack = 0;
FILE *in;
in = fopen("result.txt", "r");
translate(get_id(in), &a);
push(a);
while (true) {
if (stack[top-1] != '#') {
translate(get_id(in), &a);
push(a);
}
filter(buffer);
for (unsigned i = 0; i < strlen(buffer) - 1; i++) {
int m, n;
m = get_index(buffer[i]);
n = get_index(buffer[i+1]);
if (strcmp(TABLE[m][n], ">") == 0) {
tail_buffer = i;
break;
}
}
if (tail_buffer < (int)strlen(buffer) && tail_buffer != -1) {
for (int j = i; j > 0; j--) {
int m, n;
m = get_index(buffer[j-1]);
n = get_index(buffer[j]);
if (strcmp(TABLE[m][n], "<") == 0) {
head_buffer = j;
break;
}
}
int num = 0;
bool head_flag = false, tail_flag = false;
for (i = 0; i < strlen(stack); i++) {
if (head_buffer == num) {
if (is_terminate(stack[i]))
head_stack = i;
else
head_stack = i+1;
head_flag = true;
}
if (tail_buffer == num) {
if (is_terminate(stack[i]))
tail_stack = i;
else
tail_stack = i+1;
tail_flag = true;
}
if (head_flag && tail_flag) {
break;
}
if (is_terminate(stack[i])) {
num++;
}
}
if (head_stack != 0 && !is_terminate(stack[head_stack-1])) {
head_stack = head_stack-1;
}
if (tail_stack != (int)strlen(stack)-1 && !is_terminate(stack[tail_stack+1])) {
tail_stack = tail_stack+1;
}
gui_yue(head_stack, tail_stack);
tail_buffer = -1;
head_buffer = -1;
tail_stack = 0;
head_stack = 0;
}
printf("success./n");
break;
}
}
}
- 编译原理实验四——算符优先文法语法分析
- 语法分析(算符优先文法)
- 编译原理实验之语法分析(算符优先分析算法(C语言))
- 编译原理—语法分析
- [编译原理]算符优先文法分析与实现
- 简单算符优先文法分析程序(编译原理)
- 编译原理实验——算符优先算法
- 【编译原理】简析文法分析,语法分析
- 编译原理:文法与语法分析基本概念
- 编译原理实验二——语法分析(预测分析)
- 哈工大软件学院编译原理实验2——语法分析
- 哈工大编译原理实验2——语法分析
- 编译原理——四种文法类型
- 编译原理 实验3 语法分析
- 【编译原理】语法分析(四)
- 编译原理语法分析之文法的相关概念
- 编译原理实验三——语法分析(递归下降法)
- 编译原理语法分析实验(Java实现)
- Velocity学习笔记7——引用的不同形式
- 对于软件开发哲学的经验谈
- (菜鸟问题!) DataGrid的应用(vb.net for windows)
- IOCP投递进行读操作
- prototype1.3.1源代码解读
- 编译原理实验四——算符优先文法语法分析
- java程序代码的优化
- Webservice传送文件的实现(AXIS2 MTOM)
- 运行ASP时出现Automation错误解决方法!
- GOOGLE搜索秘籍
- 关于系统内核的东西
- 一个既有继承关系,又有component的映射文件的示例
- 今天下午完成了我的第一个JSP程序作品
- 亦舒经典语录