资源简介
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.em
文件 472 2010-01-08 12:10 xiaohu2\Debug\xiaohu.exe.em
文件 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个文件信息
相关资源
- IF-ELSE条件语句的翻译程序设计LR方法
- IF-ELSE条件语句翻译简单优先法、输出
- DO-WHILE简单优先法输出三地址
- IF-ELSE条件语句的翻译程序设计递归下
- IF-ELSE条件语句的翻译程序设计简单优
- 编译课设While循环LL(1)法,输出四元
- WHILE循环语句的翻译程序设计LL1法、输
- IF-ELSE条件语句的翻译程序设计LL1法、
- IF-ELSE条件语句的翻译程序设计递归下
- FOR循环语句的翻译LR,输出三地址
- IF-ELSE条件语句的翻译程序设计简单优
- IF-ELSE条件语句的翻译程序设计递归下
- WHILE循环语句的翻译程序设计递归下降
- IF-ELSE条件语句的翻译程序设计(LL(
- 基于LL(1)法的条件语句语法语义分
评论
共有 条评论