• 大小: 424KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: 编译原理  

资源简介

基于语法制导翻译的表达式转换编译器 中缀表达式转后缀表达式,含文档。

资源截图

代码片段和文件信息

#include
#include
#include
#include 
#include“t_node.h“
using namespace std;

 //判断c是否是操作符
bool judge(char c);

//在c中下标在first和last之间的最小元素的下标
int  findmin(vector cint firstint last);  

// 把输入的表达式字符窜进行处理,把每个操作数和操作符依次保存在b中,在c中保存相应分优先级

void translate(string avector &bvector &cint *flag2); 

//转变成表达式数
void trantotree(vector bvector ct_node *root);

//进行后序遍历
void search(t_node *root);

//清除该树占用的内存
void deletetree(t_node *root);

int main()
{
string s;
char c;
int flag=1;
int *flag2;
    while(flag==1){
    *flag2=1;
    vector v1;
vector v2;
t_node *root=new t_node(); 
cout<<“请输入中缀表达式:“<    cin>>s;
translate(sv1v2flag2);
while(*flag2==1){
    trantotree(v1v2root);
cout<<“后序遍历结果为:“< search(root);
cout< deletetree(root);
break;
}
cout<<“是不是要继续(y/n)?“<    cin>>c;
    if (c == ‘n‘ || c == ‘N‘) flag = 0; 
    while (getchar() != ‘\n‘); 
    printf(“\n“); 
    continue;
}
}



void deletetree(t_node *root)
{
if(root!=NULL)
{
deletetree(root->left);
        deletetree(root->right);
delete root;
}

}


void search(t_node *root)
{
if(root!=NULL)
{
search(root->left);
search(root->right);
cout<value<<“ “;
}

}

int rank(char ch)
{
if(ch==‘+‘||ch==‘-‘)
return 1;
else if(ch==‘*‘||ch==‘/‘||ch==‘%‘)
return 100;
else
return 1000;


}

bool judge(char c)
{
if(c==‘+‘||c==‘-‘||c==‘*‘||c==‘/‘||c==‘%‘)
return true;
else 
return false;
}


int findmin(const vector cint firstint last)
{
int temp=c[last]k=last;
for(int i=last-1;i>=first;i--)
{
if(c[i] {
k=i;
temp=c[k];
}
}
return k;
}

//转变成表达式数
void trantotree(vector bvector ct_node *root)
{
if(b.size()==1)
root->value=b[0];


   else
   {
   vector b1b2;
   vector c1c2;
   int ij;
   i=findmin(c0c.size()-1);
       root->value=b[i];
   for(j=0;j    {
   b2.push_back(b[j]);
   c2.push_back(c[j]);
   }
   root->left=new t_node();
       trantotree(b2c2root->left);
   for(j=i+1;j    {
   b1.push_back(b[j]);
       c1.push_back(c[j]);
   }
       root->right=new t_node();
       trantotree(b1c1root->right);
   }


}

// 把输入的表达式字符窜进行处理,把每个操作数和操作符依次保存在b中,在c中保存相应分优先级
void translate(string avector &bvector &cint *flag2)
{
int len=a.length();
int i=0j=0k=0count=0count1=0count2=0;
string s=““;
while(i {
if(a[i]==‘(‘)
{
k++;
i++;
count++;
count1++; 
continue;
}

if(a[i]==‘)‘)
{
k--;
i++;
count--;
count2++; 
continue;
}
if(count2>count1){cout<<“输入的表达式不正确!右括号在前!“ <        if(!judge(a[i]))//a[i]不是运算符! 
{
s=s+a[i];
i++;
}
        else            //a[i]是运算符! 
{
if(ju

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3718  2010-06-29 11:17  编译原理\main.cpp

     文件     243656  2010-06-29 18:16  编译原理\main.o

     文件        998  2010-06-29 22:58  编译原理\Makefile.win

     文件     167974  2010-06-30 09:22  编译原理\tempfile.exe

     文件      28664  2010-06-30 22:47  编译原理\tempfile.rar

     文件        413  2010-06-29 11:17  编译原理\t_node.cpp

     文件        594  2009-04-26 00:59  编译原理\t_node.h

     文件      59060  2010-06-29 18:16  编译原理\t_node.o

     文件       1032  2010-06-29 17:23  编译原理\中缀式变后缀式.dev

     文件     716008  2010-06-29 22:58  编译原理\中缀式变后缀式.exe

     文件     320000  2010-07-01 12:27  编译原理\编译原理文档111--杨博.doc

     目录          0  2010-07-01 12:27  编译原理

----------- ---------  ---------- -----  ----

              1542117                    12


评论

共有 条评论