SDUT 表达式语法分析——预测分析法
来源:互联网 发布:已备案域名靠谱吗 编辑:程序博客网 时间:2024/06/05 16:50
#include<stdio.h>#include<string>#include<iostream>#include<algorithm>#include<stack>using namespace std;int num;stack<char> A;stack<char> B;int f(char x,char y){ if(x == 'E'&&(y == 'i' || y=='(')) { cout<<num<<" "<<"E->TG"<<endl; A.pop(); A.push('G'); A.push('T'); num++; return 1; } else if(x == 'G'&&y=='+') { cout<<num<<" "<<"G->+TG"<<endl; A.pop(); A.push('G'); A.push('T'); A.push('+'); num++; return 1; } else if(x == 'G'&&(y ==')' || y == '#')) { cout<<num<<" "<<"G->^"<<endl; A.pop(); num++; return 1; } else if(x == 'T'&&(y=='i'||y=='(')) { cout<<num<<" "<<"T->FS"<<endl; A.pop(); A.push('S'); A.push('F'); num++; return 1; } else if(x =='S' && y == '*') { cout<<num<<" "<<"S->*FS"<<endl; A.pop(); A.push('S'); A.push('F'); A.push('*'); num++; return 1; } else if(x =='S' && (y ==')' || y == '#'||y=='+')) { cout<<num<<" "<<"S->^"<<endl; A.pop(); num++; return 1; } else if(x == 'F' && y == 'i') { cout<<num<<" "<<"F->i"<<endl; A.pop(); A.push('i'); num++; return 1; } else if(x == 'F' && y == '(') { cout<<num<<" "<<"F->(E)"<<endl; A.pop(); A.push(')'); A.push('E'); A.push('('); num++; return 1; } else { if(x == y) { A.pop(); B.pop(); return 1; } else { return 0; } }}void reset(){ num = 1; while(!A.empty()) { A.pop(); } A.push('#'); A.push('E'); while(!B.empty()) { B.pop(); }}int main(){ string s; while(cin>>s) { reset(); int len =s.length(); for(int i = len -1;i >= 0;i--) { B.push(s[i]); } while(1) { if(A.top() == '#'&& B.top() == '#') { cout<<"acc!"<<endl; break; } else { int key = f(A.top(),B.top()); if(key == 0) { cout<<"error!"<<endl; break; } } } } return 0;}
PS:这个题和D题的代码其实相同,改下输出就行,但是我的D题的代码有BUG,D题没测出来,这是修改后的,感觉改完可以过D题(改输出);BUG 在对G的判断和对S判断,没有加后面的条件,其实,在E和T的判断后面不用加条件了,也能过,但是感觉有问题,题目不完善吧。
0 0
- SDUT 表达式语法分析——预测分析法
- SDUT 2148 表达式语法分析——预测分析法
- 表达式语法分析——预测分析法
- 表达式语法分析——预测分析法
- 表达式语法分析——预测分析法
- 表达式语法分析——预测分析法
- SDUT 2147 表达式语法分析——递归子程序法
- 语法分析 预测分析法
- 语法分析:算术表达式预测分析程序设计
- 编译原理实验二——语法分析(预测分析)
- 编译器-语法分析(预测分析表法)
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- 表达式语法分析——递归子程序法
- iOS 开发 数据库详解之FMDB
- Ubuntu 16 Apache2简单配置
- 润乾报表性能管理之分页计算标签
- 条件输出
- 根文件系统
- SDUT 表达式语法分析——预测分析法
- web安全的重要性
- 数字图像处理(冈萨雷斯)阅读笔记
- VS2013/MFC编程入门之十八(对话框:颜色对话框)
- javascript-----2
- Qt5之数据库操作笔记(二)
- java多线程实现断点续传下载
- eclipse实用技巧(整理)
- 浏览器、操作系统DNS缓存时间