资源简介
编译原理课程设计,包括词法分析,语法分析,语义代码生成等。
代码片段和文件信息
#include
#include
#include
#include
#include //用于int 转 string
#include
#include
#include
using namespace std;
/******************************** 词法分析程序********************************/
char *verse[14]={“int““char““float““void““const““for““if““else““then“
“while““switch““break““begin““end“}; //保留字(关键字表)
char flagd[9]={‘+‘‘-‘‘*‘‘/‘‘%‘‘<‘‘>‘‘!‘‘=‘}; // 需要检查后面是否出现‘=’
char flags[10]={‘}‘‘{‘‘[‘‘]‘‘(‘‘)‘‘‘‘;‘‘:‘‘“‘}; // ‘||’ 与‘&&’ 单独判断(对各种符号的判断--包括标点符号)
bool isFlagd(char c)//需要二次判断的界符
{
for(int i=0;i<9;i++)
{
if(flagd[i]==c)
return true;
}
return false;
}
bool isFlags(char c)//需要一次判断即可确定的界符
{
for(int i=0;i<10;i++)
{
if(flags[i]==c)
return true;
}
return false;
}
bool isDigital(char ch) //判断是否为数字
{
if(ch<=‘9‘ && ch >=‘0‘)
return true;
else
return false;
}
bool isAlphabet(char ch)//判断是否是字母
{
if(ch<=‘Z‘ && ch >=‘A‘ || ch<=‘z‘ && ch>=‘a‘)
return true;
else
return false;
}
bool isSpace(char ch) //判断是否为空白符(空格、回车、制表符等)是则返回true,否则返回false
{
if(ch==‘ ‘|| ch==‘\r‘ || ch==‘\t‘)
return true;
else
return false;
}
void getCh(fstream *fpchar *ch) /*读取字符送ch*/
{
(*fp).read(chsizeof(char));
}
void getC(fstream *fpchar *ch) /*如果是空白则继续读下一个,直到不是空白*/
{
do
{
getCh(fpch);
}while(isSpace(*ch)&&(*ch != EOF));
} //即忽略空白符
bool isReverse(string str) //是否为关键字
{
for(int i=0;i<14;i++)
{
if(verse[i] ==str)
return true;
}
return false;
}
void reTract(fstream *fpchar *ch) /*光标回退一位并使 ch 为空*/
{
(*fp).seekg(-1ios::cur);
*ch = ‘ ‘;
}
typedef struct vess //定义结构:二元式表(单词,内码值)
{
string v; // 单词
string code; // 内码值
}ves;
typedef struct charSet //符号表结构体定义
{
int num;//标示符在符号表中的位置
string name;
string type;
}chSet;
typedef struct varConst //常量表结构体定义
{
int num;
string value;
}varCon;
int isExisted(list Lstring str)
//判断符号表的链表中是否已经存在str存在返回入口地址,即 L.num,否则返回-1;
{
list::iterator Iter;
for (Iter = L.begin();Iter!= L.end( );Iter++)
{
if((*Iter).name==str)
return (*Iter).num;
}
return -1;
}
int isExisted(list Lstring str)
//判断常量表的链表中是否已经存在str存在返回入口地址,即 L.num,否则返回-1;
{
list::iterator Iter;
for (Iter = L.begin();Iter!= L.end( );Iter++)
if((*Iter).value==str)
return (*Iter).num;
return -1;
}
void function_word(list *revlist *identifierlist *constent)//词法分析函数
{
char ch;
string buffer=““;
ves r; //二元式结构体
chSet id; //标示符结构体
varCon con; //常量结构体
char filename[30];
fstream f;
int n=0; //记录程序行数
stack s; //保存行数
cout<<“请您输入文件路径:“< cin>>filename;
f.open(filenameios::in|ios::binary);
if(!f)
{
cout<<“File could not be open!“< exit(0);
//abort();
}
f.seekg(0ios::end); //将指针移动到文件末尾
long
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 19266 2010-06-15 20:39 编译原理 杨敬宗--B07523--11号\Compiling.cpp
文件 338378 2010-06-15 20:21 编译原理 杨敬宗--B07523--11号\编译原理.pptx
文件 201771 2010-06-24 22:04 编译原理 杨敬宗--B07523--11号\课程设计报告--终结版.docx
目录 0 2010-11-22 22:31 编译原理 杨敬宗--B07523--11号
----------- --------- ---------- ----- ----
559415 4
- 上一篇:语法分析器 Cminus
- 下一篇:数据结构西北大学历年试卷答案
相关资源
- 哈工大编译原理大作业
- 编译原理课设 词法分析、语法分析、
- 编译原理语法分析、词法分析源代码
- 编译原理---课程实验
- 编译原理,词法分析,语法分析,四
- SAMPLE语言的词法分析器
- 词法分析器语言源代码
- hit编译原理·词法分析
- 编译原理pl\\0词法分析程序
- cmm解释器大作业
- 编译原理实验词法分析器、中间代码
- 编译原理课程设计--编译器
- 编译课设-词法分析,语法分析.zip
- 简易编译器,实现词法分析,语法分
- tiny词法分析,语法分析,语义分析,
- 编译原理实验指导书
- 编译原理词法分析器实验从文件读入
- 编译原理将简单程序翻译成四元式
- 《编译原理》实验 识别无符号数的词
- 编译原理实验词法,语法,语义
- C_minus语言词法分析器
- 编译原理课程设计词法分析程序
- 山东大学编译原理
- 编译原理词法分析+SLR语法分析+SLR语义
- 编译原理词法分析器语法分析器实验
- 以词法分析和语法分析部分的上机结
- 编译原理课程设计-LL(1)预测分析法
- 词法分析实验源程序c版
- 使用flex编写一个词法分析器
- 实验二 实现一门语言的词法分析器
评论
共有 条评论