资源简介
IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示).rar

代码片段和文件信息
#include
#include
#include
using namespace std;
//全局变量声明:
int m;//存储源程序文本字符个数。
char ssym[11]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘=‘‘‘‘.‘‘#‘‘;‘};//存储单字运算符和界符,双字符的在程序中判断。
char keyword[14][20]={{“begin“}{“call“}{“const“}{“do“}{“end“}{“if“}{“else“}{“odd“}{“procedure“}{“read“}{“then“}{“var“}{“while“}{“write“}};
//存储关键字符,采用2维数组,每个关键字是一个字符数组。
char charbuffer[1000];//存储源程序的每一个字符,包括换行符,制表符,回车符,也即初始设定源程序字符长度最大为1000。
int word_code[1000];///存储进行词法分析后得到的每一个单词符号的代号。
string word_value[1000];//存储进行词法分析后得到的每一个单词符号的值。
//子函数定义:
void scanner(char* charbufferint*word_codestring*word_valuechar* filename)//词法分析器,修改全局数组的值,通过指针传递参数。
{
fstream infileoutfile;int pos=0;//定义文件流对象infile操作源程序文本,outfile为分析结果文本,pos记录源程序文本中的所有字符个数。
infile.open(filename);
while(!infile.eof())
{
infile.seekg(pos);//初始pos为0将定位文件的开始位置,后续随着pos的改变每次定位于当前最末位置一边继续扫描。
infile.get(charbuffer[pos]);
pos++;
}
infile.close();
outfile.open(“resultfile.txt“ios::out);
int j=0;m=0;
string err;
err=“错误标识“;
cout <<“词法分析结果为:“< while(j<(pos-1))
{
if(charbuffer[j]==‘ ‘||charbuffer[j]==10||charbuffer[j]==9)//10代表换行,9代表横表。
j++;
else if(charbuffer[j]>=‘a‘&&charbuffer[j]<=‘z‘)
{
string b;
do
{
b.append(1charbuffer[j]);//获取单词。
j++;
}while(charbuffer[j]>=‘a‘&&charbuffer[j]<=‘z‘||charbuffer[j]>=‘0‘&&charbuffer[j]<=‘9‘);
int k=0;
for( k=0;k<=13;k++)
{
if(b==keyword[k])
{
k=-1;//设置标记。
break;
}
}
if(k==-1)
{
cout<<2<<“ “< if(b==“if“)
word_code[m]=2;//关键字if代号为2
else if(b==“else“)
word_code[m]=6;//关键字else代号为6
else if(b==“then“)
word_code[m]=4;//关键字then代号为4.
else
word_code[m]=20;//其余关键字都代号为20.
word_value[m]=b;
m++;
outfile.put(‘2‘);
outfile.put(‘ ‘);
outfile.put(‘ ‘);
outfile.write(&b[0]b.size());
outfile.put(10);
}
else
{
cout<<3<<“ “< word_code[m]=9; //变量令为类型9
word_value[m]=b;
m++;
outfile.put(‘3‘);
outfile.put(‘ ‘);
outfile.put(‘ ‘);
outfile.write(&b[0]b.size());//在输出文本中写入单词
outfile.put(10);
}
}
else if(charbuffer[j]>=‘0‘&&charbuffer[j]<=‘9‘)
{
int num=0k=0;
do
{
num=num*10+charbuffer[j]-‘0‘;//获得数字。
word_value[m].append(1charbuffer[j]);//添加字符。
j++;
k++;
}while(charbuffer[j]>=‘0‘&&charbuffer[j]<=‘9‘);
cout<<1<<“ “< word_code[m]=11; //数字令为类型11
m++;
outfile.put(‘1‘);
outfile.put(‘ ‘);
outfile.put(‘ ‘);
outfile.write(&charbuffer[j-k]k);//j-k计算该字符的初始位置。
outfile.put(10);//换行。
}
else if(charbuffer[j]==‘:‘)
{
word_value[m].append(1charbuffer[j]);
j++;
if(charbuffer[j]==‘=‘)
{
cou
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11734 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\BuildLog.htm
文件 663 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\IF-ELSE简单优先分析.exe.em
文件 728 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\IF-ELSE简单优先分析.exe.em
文件 621 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\IF-ELSE简单优先分析.exe.intermediate.manifest
文件 112502 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\IF-ELSE语句的简单优先分析.obj
文件 63 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\mt.dep
文件 166912 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\vc90.idb
文件 217088 2010-01-10 19:52 IF-ELSE简单优先分析\Debug\vc90.pdb
文件 3960 2010-01-07 19:01 IF-ELSE简单优先分析\IF-ELSE简单优先分析.vcproj
文件 1409 2010-01-10 19:52 IF-ELSE简单优先分析\IF-ELSE简单优先分析.vcproj.IBM-PC.IBM.user
文件 14131 2010-01-10 19:52 IF-ELSE简单优先分析\IF-ELSE语句的简单优先分析.cpp
文件 94 2010-01-10 19:52 IF-ELSE简单优先分析\resultfile.txt
文件 38 2010-01-10 19:51 IF-ELSE简单优先分析\sourcefile.txt
目录 0 2010-01-10 19:52 IF-ELSE简单优先分析\Debug
目录 0 2010-01-10 19:52 IF-ELSE简单优先分析
----------- --------- ---------- ----- ----
529943 15
相关资源
- PID_AutoTune_v0.rar
- vspd7.2.308.zip
- 价值2k的H漫画小说系统
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- ddos压力测试工具99657
- UML建模大全
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- FTP课程设计(服务端+客户端)
- 计算机图形学 边填充算法实现代码
- 电力系统潮流计算程序集合
- oracle数据迁移项目实施方案
- Web Api 通过文件流 文件到本地
- Visio图标-最新最全的网络通信图标库
- Spire API文档
- OpenGL参考手册
- Python中Numpy库最新教程
- SPD博士V5.3.exe
- 直流无刷电机方波驱动 stm32 例程代码
- layui后台管理模板
- 仿知乎界面小程序源代码
- 云平台-阿里云详细介绍
- photoshop经典1000例
- scratch垃圾分类源码(最终版本).sb
- IAR ARM 7.8破解
- TI CCS V5.4 安装步骤及破解文件
- 松下plc FP-XH的驱动
- 局域网硬件信息收集工具
- 加快Windows XP操作系统开机速度
评论
共有 条评论