【编译原理】语法分析
来源:互联网 发布:创网站软件下载 编辑:程序博客网 时间:2024/05/01 03:28
#include<iostream>#include<string>using namespace std;#define RSB 0 //Right square bracket 右方括号#define VT 1 //非终结符 #define RB 2 //Right bracket 右括号#define EQUAL 3//=号/*L → AL'L'→ ||AL' | εA → BA'A' → &&BA' | εB → !R | RR → ER' | [L]R' → >R'' | <R'' | ==E | !=E | εR'' → =E | EE → TE'E' → +TE'|εT → FT'T' → *FT'|εF → (E) | i */void L();void Lp();void A();void Ap();void B();void R();void Rp();void Rpp();void E();void E();void Ep();void T();void Tp();void F();void D(string s);void D(char now,string fun);string s;int i = 0;int main(){while(1){cin>>s;s += '#';i = 0;try{L();}catch(int e){cout<<"在("<<i+1<<")"<<s[i]<<"处停止。"<<endl;switch(e){case RSB:cout<<"没有找到右方括号]。"<<endl;continue;case VT:cout<<"没有匹配到非终结符i。"<<endl;continue;case RB:cout<<"没有找到右括号)。"<<endl;continue;case EQUAL:cout<<"没有找到等号=。"<<endl;continue;default:break;};}if(i<s.length() && s[i] == '#')cout<<"匹配成功!"<<endl;else{cout<<"匹配不成功!"<<endl;cout<<"在("<<i+1<<")"<<s[i]<<"处停止。"<<endl;}}return 0;}void D(string s){cout<<s<<endl;}void D(char now,string fun){cout<<now<<' '<<fun<<endl;}void L(){A();Lp();}void Lp(){if(s[i] == '|' && s[i+1] == '|'){i += 2;A();Lp();return;}}void A(){B();Ap();}void Ap(){if(s[i] == '&' && s[i+1] == '&'){i += 2;B();Ap();}}void B(){if(s[i] == '!'){++i;}R();}void R(){if(s[i] == '['){++i;L();if(s[i] == ']'){++i;return;}else{throw RSB;//右方括号}}E();Rp();}void Rp(){switch(s[i]){case '>':case '<':++i;Rpp();return;case '=':case '!':++i;if( s[i] == '='){++i;}else{throw EQUAL;}E();return;default:return;};}void Rpp(){if(s[i] == '='){++i;}E();}void E(){T();Ep();}void Ep(){if(s[i] == '+'){++i;T();Ep();}}void T(){F();Tp();}void Tp(){if(s[i] == '*'){++i;F();Tp();}}void F(){switch(s[i]){case '(':++i;E();if(s[i] == ')'){++i;}else{throw RB;//没有匹配到右括号}break;case 'i':++i;break;default://D("没有匹配到F");throw VT;//没有匹配到非终结符i 或 (};}
0 0
- 编译原理语法分析LR1
- 编译原理语法分析
- 编译原理之语法分析
- 【编译原理】语法分析
- 编译原理—语法分析
- 编译原理 - 语法分析
- 语法分析(编译原理)
- 编译原理语法分析
- 编译原理:语法分析
- 编译原理(三)语法分析
- 编译原理 实验3 语法分析
- 编译原理学习之语法分析
- 编译原理语法分析(java)
- 【编译原理】语法分析(一)
- 【编译原理】语法分析(二)
- 【编译原理】语法分析(三)
- 【编译原理】语法分析(四)
- 编译原理,自上而下非递归语法分析自上而下的语法分析
- 创造性思维
- java性能调优
- DTP
- 最小子序列--分治算法
- Bootstrap网格系统
- 【编译原理】语法分析
- 自定义UITableViewCell 上的多个按钮点击事件处理
- java interrupted
- Android 自定义控件1
- iOS 动画开发之Core Animation
- java中调用ajax返回html格式
- log4j(二)将日志写入数据库
- Linux中线程使用详解
- 输出字符/字符串问题小结