• 大小: 1.23MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-01
  • 语言: 其他
  • 标签: IF-ELSE  LL(1)法  

资源简介

IF-ELSE条件语句的翻译程序设计(LL(1)法、输出三地址表示)

资源截图

代码片段和文件信息

#include“xiaohu.h“
#include
#include
#include
#include
using namespace std;
LinearList list;//用来存放读取的输入字符串
//remainString用来存放剩余输入串,baseString用来存放原始字符串,并且是把分隔符去掉的,middleList用来处理三地址式时的中间链表
LinearList remainStringbaseStringmiddleList;
//keyWordList存放关键字,separList存放分隔符,operaList存放运算符,variableList存放变量
LinearList keyWordListseparListoperaListvariableList;
//grammarList用来存放分析栈的内容,这里用链表来代替栈来执行操作
LinearList grammarList;
ofstream *fout1=new ofstream(“analysis.txt“);
ofstream *fout2=new ofstream(“words.txt“);
ofstream *fout3=new ofstream(“threeAdd.txt“);
//if-else文法
/*--------------------------------------------------------*/
/*
1:E--if A then S else W
2:A--aB  3:A--(A) 4: A--notA
5:B--+TB  6:B-- -TB   7:B-- *TB   8:B-/TB
9:B--TB  11:B--==TB  12:B-->=TB 13:B--<=TB
14:B--orTB 15:B--andTB
16:B--e     //推导出空
17:T--a
18:S--a:=a+a;
19:W--a:=a*a;
*/
/*-------------------------------------------------------*/
//预测分析表
//1-19:所用推导式的序号 0:没有推到公式 -1:推导出空
/*
   a  +  -  *  /  (  )  >  <  <=  >=  ==  not  or  and  if  #
E  0  0  0  0  0  0  0  0  0   0  0   0   0     0   0    1  0
A  2  0  0  0  0  3  0  0  0   0  0   0   4     0   0    0  0
B  0  5  6  7  8  0 -1  10 9   13 12  11  0     14  15   0  -1
T  17 0  0  0  0  0  0  0  0   0  0   0   0     0   0    0  0  
S  18 0  0  0  0  0  0  0  0   0  0   0   0     0   0    0  0
W  19 0  0  0  0  0  0  0  0   0  0   0   0     0   0    0  0
*/
//把字符串转换成字符指针,用于字符串比较
char * stringToCharP(string s)
{
const char *c=s.c_str();
char *copy=new char[strlen(c)+1];
strcpy(copyc);
return copy;
}
//词法分析
//把字符转换成字符串,对单词处理时,把单词都当成字符串
string toString(char c)
{
char str[2]={c‘\0‘};
return str;
}
//把字符串和数字连接起来,输出三地址格式时用来控制地址,例如T1
string merge(string sint no)
{
char num=no+‘0‘;
char str[2]={num‘\0‘};
s+=str;
return s;
}
//判断是否是分隔符
bool isSeparator(char c)
{
char divide[]={‘‘‘;‘‘.‘‘(‘‘)‘‘{‘‘}‘};
for(int i=0;i<7;i++)
if(c==divide[i]) return true;
return false;
}
//判断是否是变量的组成元素
bool isVariable(char c)
{
if((c>=‘A‘&&c<=‘Z‘)||(c>=‘a‘&&c<=‘z‘)||(c>=‘0‘&&c<=‘9‘)||c==‘_‘)
return true;
else return false;
}
//判断是否是关键字,直接匹配
bool isKeyWord(char *c)
{
char *keyWord[6]={“if““then““or““not““and““else“};
for(int i=0;i<6;i++)
{
if(strcmp(ckeyWord[i])==0) return true;
}
return false;
}
//判断是否是运算符的组成元素
bool isOperator(char c)
{
char oElement[]={‘+‘‘-‘‘*‘‘/‘‘:‘‘=‘‘#‘‘>‘‘<‘};
for(int i=0;i<9;i++)
if(c==oElement[i]) return true;
return false;
}
void Lexical()
{
string s;
//从ifelse.txt文件中读取语句,进行词法分析
ifstream fin(“ifelse.txt“);
if(!fin)
{
cout<<“Can‘t open the source file!“< return;
}
while(getline(fins))
{
list.add(s);//把每一行语句加入到list链表中,然后对每行语句进行词法分析
}
linkNode *head=list.getFirst();
while(head!=NULL)
{
string oneline=head->data;
for(int i=0;i {
//

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1207296  2010-01-08 12:32  xiaohu2\xiaohu.ncb

     文件        872  2010-01-08 12:09  xiaohu2\xiaohu.sln

     文件        901  2010-01-08 08:51  xiaohu2\xiaohu.sln.old

    ..A..H.     11776  2010-01-08 12:32  xiaohu2\xiaohu.suo

    ..A..H.      9216  2010-01-08 11:00  xiaohu2\xiaohu.suo.old

     文件       4230  2010-01-08 12:09  xiaohu2\xiaohu.vcproj

     文件       3407  2010-01-08 08:55  xiaohu2\xiaohu.vcproj.7.10.old

     文件       1427  2010-01-08 12:32  xiaohu2\xiaohu.vcproj.XSIT-53C3F15323.xsit.user

     文件       7294  2010-01-08 12:32  xiaohu2\Debug\BuildLog.htm

     文件         67  2010-01-08 12:32  xiaohu2\Debug\mt.dep

     文件     125952  2010-01-08 10:54  xiaohu2\Debug\vc70.idb

     文件     135168  2010-01-08 10:54  xiaohu2\Debug\vc70.pdb

     文件     183296  2010-01-08 12:32  xiaohu2\Debug\vc90.idb

     文件     200704  2010-01-08 12:32  xiaohu2\Debug\vc90.pdb

     文件     511488  2010-01-08 12:32  xiaohu2\Debug\xiaohu.exe

     文件        406  2010-01-08 12:10  xiaohu2\Debug\xiaohu.exe.embed.manifest

     文件        472  2010-01-08 12:10  xiaohu2\Debug\xiaohu.exe.embed.manifest.res

     文件        381  2010-01-08 12:32  xiaohu2\Debug\xiaohu.exe.intermediate.manifest

     文件     868676  2010-01-08 12:32  xiaohu2\Debug\xiaohu.ilk

     文件     570613  2010-01-08 12:32  xiaohu2\Debug\xiaohu.obj

     文件    2870272  2010-01-08 12:32  xiaohu2\Debug\xiaohu.pdb

     文件       2170  2010-01-08 12:32  xiaohu2\文件文档\analysis.txt

     文件         47  2010-01-08 10:52  xiaohu2\文件文档\ifelse.txt

     文件        289  2010-01-08 12:32  xiaohu2\文件文档\words.txt

     文件        137  2010-01-08 12:32  xiaohu2\文件文档\threeAdd.txt

     文件      15166  2010-01-08 12:32  xiaohu2\源代码\xiaohu.cpp

     文件       3343  2010-01-08 09:03  xiaohu2\源代码\xiaohu.h

     目录          0  2010-01-08 12:33  xiaohu2\Debug

     目录          0  2010-01-10 20:26  xiaohu2\文件文档

     目录          0  2010-01-10 20:27  xiaohu2\源代码

............此处省略4个文件信息

评论

共有 条评论