资源简介
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
相关资源
- 事业单位计算机专业资料集锦.rar
- Sobol灵敏性分析.rar
- 《消防安全案例分析》核心知识点总
- 利用ansys做单个载荷疲劳分析的步骤
- 算法设计与分析中国科学院.lst
- 300门IT开发类免费课程分享.pdf
- ArcGis10.2.2地址+安装教程.docx
- amsmath.pdf
- 牛人学雷锋手把手教你制作3D全息投影
- cuda_9.0.176_windows.txt
- 6G无线热点技术研究白皮书.pdf
- vue.txt35836
- mygps.zip
- 20160922165039934.rar
- office2007_visio.txt
- 新大话西游经典系列源代码
- Qt.rar
- w3gaje.rar
- 传奇脱机挂VC源码.rar
- sniffer.zip32759
- 可视化数据模板.zip
- 5965c34d001a3b28728a3619d45acd5c.zip
- 字符串格式化需求规格说明书
- 字符Unicode标准编码计算器.zip
- 2007年全国大学生数学建模竞赛B题.r
-
从数据库中读取数据自动生成xm
l - 软件工程期末复习资料
- WEB项目测试经验总结
- 毕业设计--封面+开题报告+代码+答辩
- 网上商城后台管理设计文档
评论
共有 条评论