资源简介
编译原理实验,用C++实现的一个对if then条件语句的翻译过程,可以实现对简单布尔表达式和简单赋值语句的翻译,可以识别长串标识符。
代码片段和文件信息
#include
#include
#include
#include“bianyi_h.h“
using namespace std;
void main()
{
lexi_analy();
cout<<“*******词法分析的结果为:*******“< print();
cout< print_grammar();//输出所用文法
Analyser();
cout<<“******语法分析的结果用三地址输出为:******“< printexpression();
system(“pause“);
}
bool init(char filename[255])
{
fin.open(filename);
if(fin.fail())
{
cout<<“文件打开出错!“< return false;
}
return true;
}
void lexi_analy()
{
cout<<“输入待编译文件名:“;
char fname[200];
cin>>fname;
if(!init(fname)) //文件打开初始化没成功
return;
char al[1000];
//int pos=0;
int i=0;
char ch;
int j=0;
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(al[j]!=‘#‘)
{
if(al[j]>=‘a‘ && al[j]<=‘z‘||al[j]>=‘A‘ && al[j]<=‘Z‘||al[j]==‘_‘)
{ //变量或关键字
int m=0;
char b[20];
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(ch!=‘ ‘&&ch!=‘\n‘&&(al[j]>=‘a‘ && al[j]<=‘z‘||al[j]>=‘A‘ && al[j]<=‘Z‘||al[j]==‘_‘||al[j]>=‘0‘&&al[j]<=‘9‘))
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
//j++;
b[m]=‘\0‘;
string b1=b;
if(b1==“if“)
{
Word_table[W_length].ch=“if“;
Word_table[W_length++].type=1;
}
else if(b1==“then“)
{
Word_table[W_length].ch=“then“;
Word_table[W_length++].type=2;
}
else
{//变量
Word_table[W_length].type=11;
Word_table[W_length++].ch=b;
}
}
else if(al[j]==‘(‘)
{
Word_table[W_length].ch=“(“;
Word_table[W_length++].type=3;
j++;
}
else if(al[j]==‘)‘)
{
Word_table[W_length].ch=“)“;
Word_table[W_length++].type=4;
j++;
}
else if(al[j]>=‘0‘&&al[j]<=‘9‘) //判断数字
{
char b[20];
int m=0;
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;//再读入下一个字符
while(al[j]>=‘0‘&&al[j]<=‘9‘)
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
if(al[j]!=‘.‘)//如果当前读入的符号不为小数点,则常数读完毕
{
b[m++]=‘\0‘;
}
else//当前字符为小数点则继续向下读入
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(al[j]>=‘0‘&&al[j]<=‘9‘)
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
b[m]=‘\0‘;
}
Word_table[W_length].type=12;
Word_table[W_length++].ch=b;
}
else if(al[j]==‘+‘||al[j]==‘-‘||al[j]==‘*‘||al[j]==‘/‘)
{
Word_table[W_length].type=13;
Word_table[W_length++].ch=al[j];
j++;
}
else if(al[j]==‘>‘)
{
j++;
fin.seekg(j);
fin.get(ch);
if(ch==‘=‘)
{
al[j++]=ch;
Word_table[W_length].ch=“>=“;
Word_table[W_length++].type=6;
}
else
{
Word_table[W_length].ch=“>“;
Word_table[W_length++].type=9;
//j--;
}
}
else if(al[j]==‘<‘)
{
j++;
fin.seekg(j);
fin.get(ch);
if(ch==‘=‘)
{
al[j++]=ch;
Word_table[W_length].ch=“<=“;
Word_table[W_length++].type=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 81920 2010-01-08 14:43 递归下降法\debug\递归下降法.exe
文件 663376 2010-01-08 14:43 递归下降法\debug\递归下降法.ilk
文件 576512 2010-01-08 14:43 递归下降法\debug\递归下降法.pdb
文件 8384 2010-01-08 14:43 递归下降法\递归下降法\bianyicpp.cpp
文件 1300 2010-01-08 00:10 递归下降法\递归下降法\bianyi_h.h
文件 116194 2010-01-08 14:43 递归下降法\递归下降法\Debug\bianyicpp.obj
文件 6674 2010-01-08 14:43 递归下降法\递归下降法\Debug\BuildLog.htm
文件 63 2010-01-08 14:43 递归下降法\递归下降法\Debug\mt.dep
文件 183296 2010-01-08 14:43 递归下降法\递归下降法\Debug\vc80.idb
文件 208896 2010-01-08 14:43 递归下降法\递归下降法\Debug\vc80.pdb
文件 403 2010-01-05 21:08 递归下降法\递归下降法\Debug\递归下降法.exe.em
文件 468 2010-01-05 21:08 递归下降法\递归下降法\Debug\递归下降法.exe.em
文件 385 2010-01-08 14:43 递归下降法\递归下降法\Debug\递归下降法.exe.intermediate.manifest
文件 243 2010-01-10 17:13 递归下降法\递归下降法\result.txt
文件 45 2010-01-08 14:45 递归下降法\递归下降法\sample.txt
文件 4041 2010-01-06 17:05 递归下降法\递归下降法\递归下降法.vcproj
文件 1407 2010-01-10 22:18 递归下降法\递归下降法\递归下降法.vcproj.hp-PC.hp.user
文件 1428480 2010-01-10 22:18 递归下降法\递归下降法.ncb
文件 910 2010-01-05 21:00 递归下降法\递归下降法.sln
..A..H. 25088 2010-01-10 22:18 递归下降法\递归下降法.suo
目录 0 2010-01-08 14:43 递归下降法\递归下降法\Debug
目录 0 2010-01-08 13:10 递归下降法\debug
目录 0 2010-01-08 14:43 递归下降法\递归下降法
目录 0 2010-01-08 14:30 递归下降法
----------- --------- ---------- ----- ----
3308085 24
相关资源
- WiFi模块测试程序
- 高效FFT的C/C++代码实现包括基2的DIF和
- wifi无线称重机毕业设计
- 页面置换算法(fifolruopt) C语言编写
- 页式存储管理FIFO实现
- SIFT检测特征点及特征点描述
- Sift特征点提取与匹配opencv库
- VC++6.0编程实现MIF文件点集读取与凸壳
- 图像处理方面学习的好MFC显示直方图
- 国家边界省届经纬度坐标
- C++显示GIF动画和图片
- MFC版Sniffer
- VC打开多种图像格式bmpjpggiftifraw
- sniffer 源码
- 数据结构与算法分析C++版 Clifford A.
- MATLAB Demystified中文版.最好的matlab自学
- 基于SIFT算法的图像拼接--C语言实现
- meanShift视频目标跟踪 C++实现源代码
- c实现的sift算法源代码
- diffie-hellman密钥交换协议vc++实现
- SIFT特征提取C++
- 基于SIFT多幅图像拼接系统 毕设源码
- 原创MFC+WinpCap网络嗅探器sniffer
- vc下的sift程序
- C++网络嗅探器代码、论文均有
- VC++ 实现Diffie-Hellman密钥交换算法
- SIFT算法_全景图像拼接VC源码有中文注
- 用C++实现MapInfo 的mif文件读取源码
- 经典数字图像测试图灰度图,jpg,b
- gsl科学计算库的使用方法包含如何产
评论
共有 条评论