• 大小: 0.09M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-06
  • 语言: 其他
  • 标签: 其他  

资源简介

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.embed.manifest

     文件        728  2010-01-10 19:52  IF-ELSE简单优先分析\Debug\IF-ELSE简单优先分析.exe.embed.manifest.res

     文件        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


评论

共有 条评论