资源简介
东北大学软件学院编译原理课程的代码及报告
代码片段和文件信息
#include
#include
#include
#include
#include
#include
char ID[50][12];//符号表
float C[20]; //常数表
int c = 0;
int aut[10][7]={ 2 0 0 0 8 9 15
2 3 511 0 0 11
4 0 0 0 0 0 0
4 0 511 0 0 11
7 0 0 6 0 0 0
7 0 0 0 0 0 0
7 0 011 0 0 11
8 0 0 0 8 0 12
0 0 0 0 0 10 14
0 0 0 0 0 0 13};
char keywords[28][12]={“program““begin““end““var““while““do“
“repeat““until““for““to““if““then““else“
“;“ “:“ “(“ “)“ ““ “:=“ “+“ “-“ “*“ “/“
“>“ “>=“ “==“ “<“ “<=“};
//code为0 代表为常数
// code为1 代表为关键字
//code为2 代表为标识符
// code为3 代表为界符
//value代表为该单词在其各个表中的位置
struct token
{ int code;
int value;}; //Token结构
//函数IsLetter()判断字符ch是否为字母
int IsLetter(char ch)
{
if((ch >= ‘A‘&&ch <= ‘Z‘) || (ch >= ‘a‘&&ch <= ‘z‘))
{
return 1;
}else
{
return 0;
}
}
//函数IsDigit()判断字符ch是否为数字
int IsDigit(char ch)
{
if(ch >= ‘0‘&&ch <= ‘9‘)
{
return 1;
}else
{
return 0;
}
}
//函数IsID()判断字符ch是否为单界符
int IsID(char ch)
{
if(ch ==‘;‘||ch ==‘:‘||ch ==‘(‘||ch ==‘)‘||ch ==‘‘||ch ==‘=‘
||ch ==‘+‘||ch ==‘-‘||ch ==‘*‘||ch ==‘/‘||ch ==‘<‘||ch ==‘>‘)
{
return 1;
}else
{
return 0;
}
}
//查状态变换表
int find(int schar ch) //s是当前状态,ch是当前字符,返回值是转换后状态
{
//返回11状态
//s == 2
if(s == 2 && (ch!=‘.‘ && !IsDigit(ch) && ch != ‘E‘ && ch!= ‘e‘))
{
return 11;
}
//s == 4
if(s == 4 && (!IsDigit(ch) && ch != ‘E‘ && ch!= ‘e‘))
{
return 11;
}
//s == 7
if(s == 7 && !IsDigit(ch))
{
return 11;
}
//返回12状态
if(s == 8 && !IsDigit(ch) &&!IsLetter(ch))
{
return 12;
}
//返回13状态
if(s == 10)
{
return 13;
}
//返回14状态
if(s == 9 && !IsID(ch))
{
return 14;
}
//返回15状态
if(s == 1 && !IsDigit(ch) && !IsLetter(ch) && !IsID(ch))
{
return 15;
}
//查状态转换矩阵aut[10][7];
if(IsDigit(ch))
{
return aut[s-1][0];
}else
{
if(IsLetter(ch))
{
if(ch ==‘E‘||ch ==‘e‘ &&(s == 2 || s == 4))
{
return aut[s-1][2];
}
return aut[s-1][4];
}else
{
if(ch ==‘.‘)
{
return aut[s-1][1];
}else
{
if(IsID(ch))
{
if((ch ==‘+‘||ch ==‘-‘)&&(s!=1) && (s!=9))
{
return aut[s-1][3];
}
return aut[s-1][5];
}else
{
return aut[s-1][6];
}
}
}
}
}
//将w[i]中的符号拼接到strTOKEN的尾部函数
char * mystrcmp(char *str char w)
{
int i=0;
while(str[i]!= NULL)
i++;
if(w !=‘\0‘ )
//要为下一个字符分配内存
str[i] = w;
return str;
}
//将常数插入常数表返回常数表指针
int InsertConst(float num)
{
C[c] = num;
return c++;
}
//如果strTOKEN为关键字或界符返回关键字表或界符表的序号否则为标识符返回0
int Reserve(char *strTOKEN)
{
bool temp = 0;
for(int i = 1;i <= 28;i++)
{
if(strlen(keywords[i]) == strlen(strTOKEN))
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 333824 2008-10-29 08:07 编译原理张镖20063506\编译方法实验报告张镖.doc
文件 2849 2008-10-29 10:52 编译原理张镖20063506\实验二\translator.cpp
文件 4343 2008-04-30 22:21 编译原理张镖20063506\实验二\translation.dsp
文件 545 2008-04-30 21:31 编译原理张镖20063506\实验二\translation.dsw
文件 50176 2008-10-28 22:21 编译原理张镖20063506\实验二\translation.ncb
文件 48640 2008-10-28 22:21 编译原理张镖20063506\实验二\translation.opt
文件 911 2008-10-28 22:20 编译原理张镖20063506\实验二\translation.plg
文件 548959 2008-10-28 22:20 编译原理张镖20063506\实验二\Debug\translation.exe
文件 1123328 2008-10-28 22:20 编译原理张镖20063506\实验二\Debug\translation.pdb
文件 222200 2008-10-28 22:20 编译原理张镖20063506\实验二\Debug\translator.obj
文件 118784 2008-10-28 22:20 编译原理张镖20063506\实验二\Debug\vc60.pdb
文件 5827 2008-10-29 10:50 编译原理张镖20063506\实验一\scaner.cpp
文件 9295 2008-10-26 19:05 编译原理张镖20063506\scanComplier\complier.cpp
文件 4350 2008-04-10 18:53 编译原理张镖20063506\scanComplier\scanComplier.dsp
文件 549 2008-04-10 13:58 编译原理张镖20063506\scanComplier\scanComplier.dsw
文件 50176 2008-10-26 19:09 编译原理张镖20063506\scanComplier\scanComplier.ncb
文件 49664 2008-10-26 18:58 编译原理张镖20063506\scanComplier\scanComplier.opt
文件 1506 2008-10-26 19:06 编译原理张镖20063506\scanComplier\scanComplier.plg
文件 27631 2008-10-26 19:06 编译原理张镖20063506\scanComplier\Debug\complier.obj
文件 0 2008-10-26 19:06 编译原理张镖20063506\scanComplier\Debug\complier.sbr
文件 262249 2008-10-26 19:06 编译原理张镖20063506\scanComplier\Debug\scanComplier.exe
文件 590848 2008-10-26 19:06 编译原理张镖20063506\scanComplier\Debug\scanComplier.pdb
文件 61440 2008-10-26 19:06 编译原理张镖20063506\scanComplier\Debug\vc60.pdb
目录 0 2008-10-29 11:10 编译原理张镖20063506\实验二\Debug
目录 0 2008-10-29 11:09 编译原理张镖20063506\scanComplier\Debug
目录 0 2008-10-29 10:53 编译原理张镖20063506\实验二
目录 0 2008-10-29 10:53 编译原理张镖20063506\实验一
目录 0 2008-10-29 11:09 编译原理张镖20063506\scanComplier
目录 0 2008-10-29 10:53 编译原理张镖20063506
----------- --------- ---------- ----- ----
............此处省略2个文件信息
- 上一篇:Proteus 时钟显示仿真
- 下一篇:通过网格确定坐标 实现点与点之间的距离计算
评论
共有 条评论