资源简介
编译_DO-WHILE循环语句的翻译程序设计(LR方法、四元式表示)
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
string name; //用来输入文件名用
string fh[30];
string kong=“ “;
int num;
//int start; //用在输出输入串时确定开始的位置
//------------------------------------------------------
struct State//定义状态栈
{
int top;
int m[100];
};
void InitState(State &s)//建立状态栈
{
s.top=0;
}
int PushState(State &sint i)//把元素压入栈
{
if(s.top==100) return -1;
else
{
s.m[s.top]=i;
s.top++;
}
return 0;
}
int GetStateTop(State &s) //取栈顶符号
{
int i;
if(s.top==0) return -1;
else
{
int n=s.top-1;
i=s.m[n];
}
return i;
}
void PopStateTop(State &s)//删除栈顶元素
{
if(s.top==0) cout<<“wrong1“;
else
--s.top;
}
//-----------------------------------------------------------------
//定义一个用于四元式输出的栈
struct sys
{
int top;
string s[5];
};
//-----------------------------------------------------------------
//
struct Sign//定义符号栈
{
int top;
string st[100];
};
void InitSign(Sign &s)//建立符号栈
{
s.top=0;
}
int PushSign(Sign &sstring str)//把元素压入栈
{
if(s.top==100) return -1;
else
{
s.st[s.top]=str;
s.top++;
}
return 0;
}
string GetSignTop(Sign &s) //取栈顶符号
{
string str;
if(s.top==0) cout<<“wrong“;
else
{
int n=s.top-1;
str=s.st[n];
}
return str;
}
void PopSignTop(Sign &s)//删除栈顶元素
{
if(s.top==0) cout<<“wrong1“;
else
--s.top;
}
//----------------------------------------------------------
//词法分析部分
const string baoliuzi[]=
{
“int““double““float““void““long““for““if““else““while““include“
“return““break““continue““do““true““false““case““switch“
};
void show(string &s)
{
fh[num]=s;
++num;
ofstream fout(“词法分析.txt“ios::out|ios::app);
if(isdigit(s[0]))
{
fout<<“<“<“< s=““;
}
else
for(int i=0;i<18;++i)
{
if(s==baoliuzi[i])
{
fout<<“<“<“< break;
}
if(i==17)
{
if(ispunct(s[0])&&s[0]!=‘_‘)
{
fout<<“<“<“< }
else
{
fout<<““< }
}
}
s=““;
}
bool isjxf(char ch) //判断是否为界限符
{
bool tag=0;
string s=“{[()]};\‘\““;
for(int i=0;i {
if(ch==s[i])
{
tag=1;
break;
}
}
return tag;
}
bool isblank(char ch) //判断是否为空
{
bool tag=0;
if(ch==‘ ‘)
tag=1;
return tag;
}
bool isdian(char ch) //判断是否为小数点
{
bool tag=0;
if(‘.‘==ch)
tag=1;
return tag;
}
void fenxi(string s)
{
string yunsfbiaosf;
for(int i=0;i {
if(isblank(s[i]))
{
if(biaosf!=““)
show(biaosf);
}
else if(ispunct(s[i]))
{
if(isjxf(s[i]))
{
if(yunsf!=““)
show(yunsf);
if(biaosf!=““)
show(biaosf);
- 上一篇:杭电C++ 期末考试卷
- 下一篇:C++ RTSP/RTP流媒体客户端源码
相关资源
- ASR6500,ASR6505原厂测试代码
- LCD驱动芯片ST7701SI SPI接口底层驱动配
- stm32库函数代码自动生成器V1.2
- USB CAN Tool 源代码(LabVIEW 2011环境)
- 超声波水表源代码
- 一个模糊PID温度控制算法源代码
- 颜色识别形状识别STM103嵌入式代码
- PE文件操作代码
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 高性能服务器代码(50_06th_server_thre
- olsr协议代码
- TCP/IP客户端和服务器端源代码,好用
- 代码雨.cpp
- 基于opencv的模板匹配代码
- 交互式计算机图形学 第六版 OpenGL源代
- 数据结构教程李春葆第五版书中例题
- 三次样条插值类源代码!
- 高精度加法(c++代码)
- diy写字机grbl v1.1源代码
- ftp工具代码
- C语言常用代码(分章节)
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c++ 刷屏软件代码
- 关于LED制作的源代码合集(38套)
- OBD_CAN读取代码(stm32f103)
-
STM32-ba
se64加密源代码 - 谭浩强第五版课件及代码
- 俄罗斯方块(c++控制台代码)
评论
共有 条评论