资源简介
实现了中缀式变后缀,语法树的生成,可以进行简单的计算
代码片段和文件信息
#include“seqstack.h“
#include“Function.h“
# include
char string[30]; //从键盘接受的源字符串组
char postex[30]; //转化后的后缀式数组
char tree[10][3]; //存放语法树
Function f;
seqstack stack(30);
void print(char s[]int l)
{
for(int i=0;i {
if(s[i]==‘#‘) break;
else cout< }
cout< }
//把中缀式变为后缀式,形参是中缀表达式
void postfix(char s[])
{
int ij;
stack.push(‘#‘);
char x1=stack.gettop();
i=j=0;
char x2=s[i++];
while(!stack.empty())
{
//数字与字母直接输出
if(f.characterType(x2)==0)
{
postex[j++]=x2;
x2=s[i++];
}
else if(f.characterType(x2)==1)
{
postex[j++]=x2;
x2=s[i++];
}
//进行运算符(op1op2)优先级的比较
else if(f.priority_comp(x1x2)==‘<‘)
{
stack.push(x2);
x1=stack.gettop();
x2=s[i++];
}
else if(f.priority_comp(x1x2)==‘>‘)
{
x1=stack.pop();
postex[j++]=x1;
if(!stack.empty())
x1=stack.gettop();
}
else if(f.priority_comp(x1x2)==‘=‘)
{
if(x2==‘#‘||x2==‘=‘) break;
else {
stack.pop();
if(!stack.empty())
{
x1=stack.gettop();
x2=s[i++];
}
}
}
}
//增加一个结束标志
postex[j++]=‘#‘;
stack.clear();
}
//输出语法树
void printtree(char s[])
{
//本程序只实现了简单的四则运算
char oparray[4]={‘+‘‘-‘‘*‘‘/‘};
int l=(int)strlen(s);
int ij;
int m=0;
int t=-1;
int p=0;
char sa;
for(i=0;i {
sa=s[i];
if(sa==‘#‘) break;//如果为‘#’,结束
//找到后缀式中的第一个运算符
for(j=0;j<4;j++)
{
while(sa!=oparray[j]) j++;
if(j<4) break;
}
if(j<4)
{
p=i-1;
tree[m][0]=sa;
s[i]=‘#‘;
if(s[p]!=‘#‘)
{
tree[m][2]=s[p];
s[p]=‘#‘;
if(s[p-1]!=‘#‘)
{
tree[m][1]=s[p-1];
s[p-1]=‘#‘;
if(m!=0) t=m-1;
}
else tree[m][1]=char(m-1);
}
else
{
p--;
while(p>=0&&s[p]==‘#‘) p--;
if(p>=0)
{
tree[m][1]=s[p]s[p]=‘#‘;
tree[m][2]=char(m-1);
}
else
{
tree[m][1]=char(t);
tree[m][2]=char(m-1);
}
}
m++;
}
}
m--;
int left=19center=20;
//可以输出 ‘/‘ 或者 ‘\‘作为指示!!
for( ;m>=0;m--)
{
if(tree[m][0]!=‘L‘&&tree[m][0]!=‘R‘)
cout< else if(tree[m][0]==‘L‘) left=center-6center=left;
else left=center+3center=left;
if(f.characterType(tree[m][1])==0)
left-=3cout< else
{
t=int(tree[m][1]);
left-=3;
cout< tree[t][0]=‘L‘;
}
if(f.characterType(tree[m][2])==0)
cout< else
{
t=int(tree[m][2]);
cout< tree[t][0]=‘R‘;
}
cout< }
stack.clear();
}
//计算表达式的结果,利用全局变量oparg等
double compute(char s[])
{
stack.push(‘#‘);
int l=(int)strlen(s);
int ij;
//先判断表达式是否能计算,是否存在异常!
for(i=0;i if(f.characterType(s[i])==0)
{
cout<<“ 表达式中有符号变量需要赋值,无法求出结果!!“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 379392 2008-05-19 11:10 编译实验\报告.doc
文件 4899 2008-05-19 11:08 编译实验\代码\ff.cpp
文件 50176 2002-07-02 15:24 编译实验\代码\ff.ncb
文件 238 2002-07-02 15:24 编译实验\代码\ff.plg
文件 1676 2008-05-18 22:11 编译实验\代码\Function.h
文件 1186 2008-05-18 21:27 编译实验\代码\seqstack.h
..A.SH. 22016 2008-05-19 10:51 编译实验\代码\Thumbs.db
文件 3693 2002-07-02 15:24 编译实验\代码\ff.dsp
文件 48640 2002-07-02 15:24 编译实验\代码\ff.opt
文件 529 2002-07-02 15:24 编译实验\代码\ff.dsw
文件 241718 2008-05-19 11:08 编译实验\代码\Debug\ff.exe
文件 488252 2008-05-19 11:08 编译实验\代码\Debug\ff.ilk
文件 33168 2008-05-19 11:08 编译实验\代码\Debug\ff.obj
文件 300044 2008-05-18 22:11 编译实验\代码\Debug\ff.pch
文件 574464 2008-05-19 11:08 编译实验\代码\Debug\ff.pdb
文件 58368 2002-07-02 15:24 编译实验\代码\Debug\vc60.idb
文件 69632 2008-05-19 11:08 编译实验\代码\Debug\vc60.pdb
目录 0 2002-07-02 15:25 编译实验\代码\Debug
目录 0 2002-07-02 15:25 编译实验\代码
目录 0 2002-07-02 15:24 编译实验
----------- --------- ---------- ----- ----
2278091 20
相关资源
- delphi仿系统自带计算器
- 字符Unicode标准编码计算器.zip
- 简单计算器——汇编语言实现
- 多次提前还款计算器
- Win32 汇编计算器288875
- 纯电动车辆动力系统优化计算器
- 自制EXCEL计算器,免去敲打计算器
- labview实现的简单计算器
- 数控加工切削用量计算器V2.0
- 航模马达绕线计算器
- labview中级计算器的制作
- labview基础入门,初级计算器的制作
- scratch制作计算器.sb3
- stc89c51所制作的一个简易计算器包含原
- linux计算器代码
- labview计算器
- Qt5做的高仿计算器
- 编译原理语法树的实现
- PID计算器.zip
- 51单片机的简易计算器仿真及源码
- 用LabVIEW做的小型计算器
- 基于STC89C52单片机的简易计算器不能实
- verilog计算器代码
- 用Qt实现科学计算器——完整代码
- 嵌入式时钟、计算器设计报告
- 右心导管计算器
- 计算器程序设计报告
- Erlang B公式计算器
- 卡西欧5800p计算器所有编程命令解释打
- EDA简易计算器
评论
共有 条评论