资源简介
编译原理课程设计,包括词法分析,语法分析,语义代码生成等。

代码片段和文件信息
#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 (类pascal) 词法分析程序 C 版
- Delphi做的用于分析Pascal语言的词法分
- 编译原理实验:词法分析,语法分析
- 编译原理语法分析器、词法分析器
- 哈工大威海-编译原理实验报告和源码
- 编译原理课程设计 while do循环语句翻
- 词法分析器 -计算器版
- 词法语法分析器
- 词法分析器自动生成器 FLEX
- 中科院汉语词法分析系统ICTCLAS安装包
- 词法分析器Lex(编译原理)
- 华工编译原理实验词法分析+语法分析
- 词法分析器
- 词法分析器有界面
- 武汉大学国际软件学院解释器构造作
- 编译原理课程设计(词法分析和语法
- 利用FLEX设计一个small c的词法分析器文
- 编译原理 词法和语法分析
- 编译原理实验-flex自动构造词法分析
- 编译原理词法分析,LL1,SLR1)实验报
- 词法分析语法分析实验报告及源码
- 编译原理词法分析语法分析
- C Minus 语法分析器及课程设计报告
- 词法分析器+语法分析器+中间代码生成
- 编译原理 王生原老师答案和资料
- 词法分析程序和语法分析程序 编译原
- 词法分析程序可记录行号、识别注释
- 哈工大编译原理词法分析实验报告
- 编译器词法分析,语法分析
评论
共有 条评论