词法分析优化
来源:互联网 发布:python if 不等于 编辑:程序博客网 时间:2024/06/05 11:01
<pre name="code" class="cpp">#include <iostream>#include <cstring>#include <string>using namespace std;class Node{public: string name; int type;};struct word{ Node node[1000]; int ans,t; string sstack; void lian10_11() { if(sstack[0]>='0'&&sstack[0]<='9') //cout<<"11 "<<sstack<<endl; { node[t].name=sstack; node[t++].type=11; } if(sstack[0]>='a'&&sstack[0]<='z') { node[t].name=sstack; node[t++].type=10; } sstack.clear(); } void getarray(string s) { t=0; int n=s.length(); sstack.clear(); for(int i=0; i<n; i++) { if(s[i]=='b') { if(s.substr(i,5)=="begin"&&s[i+5]==' ') { lian10_11(); { node[t].name="begin"; node[t++].type=1; } i+=4; } else sstack+=s[i]; } else if(s[i]=='i') { if(s.substr(i,2)=="if"&&s[i+2]==' ') { lian10_11(); { node[t].name="if"; node[t++].type=2; } i+=1; } else sstack+=s[i]; } else if(s[i]=='t') { if(s.substr(i,4)=="then"&&s[i+4]==' ') { lian10_11(); { node[t].name="then"; node[t++].type=3; } i+=3; } else sstack+=s[i]; } else if(s[i]=='w') { if(s.substr(i,5)=="while"&&s[i+5]==' ') { lian10_11(); { node[t].name="while"; node[t++].type=4; } i+=4; } else sstack+=s[i]; } else if(s[i]=='d') { if(s.substr(i,2)=="do"&&s[i+2]==' ') { lian10_11(); { node[t].name="do"; node[t++].type=5; } i+=1; } else sstack+=s[i]; } else if(s[i]=='e') { if(s.substr(i,3)=="end"&&s[i+3]==' ') { lian10_11(); { node[t].name="end"; node[t++].type=6; } i+=2; } else sstack+=s[i]; } else if(s[i]=='+') { lian10_11(); { node[t].name="+"; node[t++].type=13; } } else if(s[i]=='-') { lian10_11(); { node[t].name="-"; node[t++].type=14; } } else if(s[i]=='*') { lian10_11(); { node[t].name="*"; node[t++].type=15; } } else if(s[i]=='/') { lian10_11(); { node[t].name="/"; node[t++].type=16; } } else if(s[i]==':') { lian10_11(); if(s[i+1]=='=') { { node[t].name=":="; node[t++].type=18; } i++; } else { node[t].name=":"; node[t++].type=17; } } else if(s[i]=='<') { lian10_11(); if(s[i+1]=='>') { { node[t].name="<>"; node[t++].type=21; } i++; } else if(s[i+1]=='=') { { node[t].name="<="; node[t++].type=22; } i++; } else { node[t].name="<"; node[t++].type=20; } } else if(s[i]=='>') { lian10_11(); if(s[i+1]=='=') { { node[t].name=">="; node[t++].type=24; } i++; } else { node[t].name=">"; node[t++].type=23; } } else if(s[i]=='=') { lian10_11(); { node[t].name="="; node[t++].type=15; } } else if(s[i]==';') { lian10_11(); { node[t].name=";"; node[t++].type=26; } } else if(s[i]=='(') { lian10_11(); { node[t].name="("; node[t++].type=27; } } else if(s[i]==')') { lian10_11(); { node[t].name=")"; node[t++].type=28; } } else if(s[i]=='#') { lian10_11(); { node[t].name="#"; node[t++].type=0; } } else if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='z')) sstack+=s[i]; } if(!sstack.empty()) { lian10_11(); } ans=t; }};int main(){ string str; getline(cin,str); word w; w.getarray(str); cout<<w.ans<<endl; for(int i=0; i<w.ans; i++) cout<<i<<" : "<<w.node[i].name<<" "<<w.node[i].type<<endl; return 0;}
0 0
- 词法分析优化
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- Hibernate数据库操作基本实例
- cleancache
- sql语句实现按某字段分组并按另一字段排名(oracle)
- 适时选择 getDeclared X X X 和 get x X X
- 文章标题
- 词法分析优化
- Glide图片加载变形如何解决?
- error LNK2001: 无法解析的外部符号
- 关于JS中Apply和Call的一些理解
- 汇编语言第6章 宏与子程序
- 黑马程序员——Java基础---面向对象
- linux下的线程的创建退出及回收
- 蓝牙低功耗数据包格式
- Fuel 多台物理机组成单控制节点