资源简介
算符优先分析法 C++ 编译原理
运行环境:Visual Studio 2005
#include "SStack.h"
#include
#include
using namespace std;
class Functor
{
private :
char ** table;
string ** production;
string prog;//待分析字符串
int p;//字符指针
int num;//终结符个数
int num1;//产生式个数
SStack stack;
public:
Functor(int m,int n,char ** T,string **prod,string pr)
{
num=m;
num1=n;
table=T;
production=prod;
prog=pr;
p=0;
stack.push('$');
}
void traversal()
{
while(p<(prog.length()))
{
stack.display();
cout<<prog.substr(p)<<" ";
char ch;
if(Getnum(stack.gettop()))
{
ch=stack.gettop();
}
else
{
ch=stack.getsecond();
}
switch(compare(ch,prog[p]))
{
case 1:
case 2:stack.push(prog[p]);p++;cout<<"移入"<<endl;break;
case 3:reduct();cout<<"归约"<<endl;break;
}
}
cout<<"分析成功!"<<endl;
}
int Getnum(char ch)
{
for(int i=1;i': return 3;break;
case '<': return 2;break;
case '=': return 1;break;
default:cout<<endl<<"输入串有误,程序将终止!"<<endl;system("pause");exit(0);break;
}
}
void reduct()
{
//待定
string token="";
int temp;
string str="";
if(!Getnum(stack.gettop()))
{
token+=stack.gettop();
stack.pop();
}
char ch=stack.gettop();
str+=ch;
temp=Haven(str);
if(temp!=-1)
{
token+=production[temp][0];
}
else
{
token+=ch;
}
stack.pop();
bool Nover=true;
while(Nover)
{
if(Getnum(stack.gettop()))
{
if(compare(stack.gettop(),ch)==2)
{
Nover=false;
}
else
{
ch=stack.gettop();
str="";
str+=ch;
temp=Haven(str);
if(temp!=-1)
{
token+=production[temp][0];
}
else
{
token+=ch;
}
stack.pop();
}
}
else
{
token+=stack.gettop();
stack.pop();
}
}
string token2="";
代码片段和文件信息
#include
#include “Functor.h“
#include
using namespace std;
void main()
{
int num=7;
int num1=3;
char **table;
table=new char *[num];
for(int i=0;i {
table[i]=new char [num];
for(int j=0;j {
table[i][j]=NULL;
}
}
table[0][1]=‘+‘;
table[0][2]=‘*‘;
table[0][3]=‘i‘;
table[0][4]=‘(‘;
table[0][5]=‘)‘;
table[0][6]=‘$‘;
table[1][0]=‘+‘;
table[1][1]=‘>‘;
table[1][2]=‘<‘;
table[1][3]=‘<‘;
table[1][4]=‘<‘;
table[1][5]=‘>‘;
table[1][6]=‘>‘;
table[2][0]=‘*‘;
table[2][1]=‘>‘;
table[2][2]=‘>‘;
table[2][3]=‘<‘;
table[2][4]=‘<‘;
table[2][5]=‘>‘;
table[2][6]=‘>‘;
table[3][0]=‘i‘;
table[3][1]=‘>‘;
table[3][2]=‘>‘;
table[3][5]=‘>‘;
table[3][6]=‘>‘;
table[4][0]=‘(‘;
table[4][1]=‘<‘;
table[4][2]=‘<‘;
table[4][3]=‘<‘;
table[4][4]=‘<‘;
table[4][5]=‘=‘;
table[5][0]=‘)‘;
table[5][1]=‘>‘;
table[5][2]=‘>‘;
table[5][5]=‘>‘;
table[5][6]=‘>‘;
table[6][0]=‘$‘;
table[6][1]=‘<‘;
table[6][2]=‘<‘;
table[6][3]=‘<‘;
table[6][4]=‘<‘;
table[6][6]=‘=‘;
string ** css;
css=new string * [num1];
for(int i=0;i {
css[i]=new string [6];
for(int j=0;j<5;j++)
{
css[i][j]=““;
}
}
css[0][0]=“E“;
css[0][1]=“E+T“;
css[0][2]=“T+T“;
css[0][3]=“T“;
css[0][4]=“F+F“;
css[1][0]=“T“;
css[1][1]=“T*F“;
css[1][2]=“F*F“;
css[1][3]=“F“;
css[2][0]=“F“;
css[2][1]=“(E)“;
css[2][2]=“i“;
string prog;
cout<<“请输入待分析字符串:“< cin>>prog;
Functor myFun(numnum1tablecssprog);
myFun.traversal();
system(“pause“);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1614 2009-05-18 18:05 main.cpp
文件 1342 2009-05-18 18:38 SStack.h
文件 2707 2009-05-18 18:44 Functor.h
----------- --------- ---------- ----- ----
5663 3
- 上一篇:内部排序算法的比较分析与实现
- 下一篇:小型编译器的设计C语言实现
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论