资源简介
哈工大威海编译原理实验报告和源代码:
实验一 词法分析
实验二 语法分析
实验三 语义分析和中间代码生成
附有代码和实验报告~仅供参考~
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
#define MAX 50 //长度最大值 50
char ch =‘ ‘; // 空格
string keyword[50]={“else““if““int“};//关键字为else,if,int
int alphabet(char c) { //字母的处理过程
if(((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘)))
return 1;
else
return 0;
}
int KeyWord(string c){ //关键字的处理过程
int i;
for(i=0;i if(keyword[i].compare(c)==0)
return 1;
}
return 0;
}
int num(char c){ //数字的处理过程
if(c>=‘0‘&&c<=‘9‘)
return 1;
else
return 0;
}
void operation(FILE *fpin){//运算符处理过程
ofstream out(“token.txt“ios::out);
string arr=““;
while((ch=fgetc(fpin))!=EOF) {
arr=““;
if(ch==‘ ‘||ch==‘\t‘||ch==‘\n‘){} //空格,缩进,换行,均不做操作
else if(alphabet(ch)){
while(alphabet(ch)||num(ch)) {
arr=arr+ch;
ch=fgetc(fpin);
}
fseek(fpin-1LSEEK_CUR); //循环结束后,重定位流指针从当前位置左移一位。开始判断新的输入是什么类型
if (KeyWord(arr)){out< else out< }
else if(num(ch)){ //若是数字
while(num(ch)||ch==‘.‘&&num(fgetc(fpin))||fgetc(fpin)==‘e‘||ch==‘e‘)
{
if(ch==‘.‘)
fseek(fpin-1LSEEK_CUR);//指针左移
arr=arr+ch;
if(ch==‘e‘)
{
ch=fgetc(fpin); // 新读入
if( ch==‘+‘) arr+=‘+‘;
else {arr+=‘-‘ fseek(fpin-1LSEEK_CUR);};//指针左移
}
ch=fgetc(fpin);
}
fseek(fpin-3LSEEK_CUR);
out< }
else switch(ch){
case‘+‘:
case‘-‘ :
case‘*‘ :
case‘=‘ :
case‘/‘ :out< case‘(‘ :
case‘)‘ :
case‘[‘ :
case‘]‘ :
case‘;‘ :
case‘#‘ :
case‘.‘ :
case‘‘ :
case‘{‘ :
case‘}‘ :out<
case ‘“‘:{
string string1=““;
do
{
string1+=ch;
ch=fgetc(fpin);
} while (ch!=‘“‘);//循环得到 ““
string1+=ch;
out< }break;
case‘:‘ :{ch=fgetc(fpin);
if(ch==‘=‘) out<<“:=“<<“ \t4“<<“\t运算符“<
else {out<<“=“<<“ \t4“<<“\t运算符“<
fseek(fpin-1LSEEK_CUR);} //当指针回退一个字符
}break;
case
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4836 2014-05-19 20:16 编译原理\实验1 词法分析\CiFa.cpp
文件 3377 2014-05-19 21:38 编译原理\实验1 词法分析\CiFa.dsp
文件 516 2014-05-19 21:38 编译原理\实验1 词法分析\CiFa.dsw
文件 41984 2014-05-19 21:38 编译原理\实验1 词法分析\CiFa.ncb
文件 48640 2014-05-19 21:38 编译原理\实验1 词法分析\CiFa.opt
文件 1176 2014-05-19 21:38 编译原理\实验1 词法分析\CiFa.plg
文件 72 2014-05-19 12:29 编译原理\实验1 词法分析\test.txt
文件 638 2014-05-19 21:38 编译原理\实验1 词法分析\token.txt
文件 11258 2014-05-19 20:49 编译原理\实验2 语法分析\GT.CPP
文件 3353 2014-05-19 21:35 编译原理\实验2 语法分析\GT.DSP
文件 512 2014-05-19 21:38 编译原理\实验2 语法分析\GT.DSW
文件 41984 2014-05-19 21:38 编译原理\实验2 语法分析\GT.ncb
文件 48640 2014-05-19 21:38 编译原理\实验2 语法分析\GT.OPT
文件 1160 2014-05-19 21:35 编译原理\实验2 语法分析\GT.PLG
文件 32 2014-05-19 20:34 编译原理\实验2 语法分析\MP.txt
文件 22 2014-05-19 21:35 编译原理\实验2 语法分析\PLMP.txt
文件 32 2014-05-19 20:29 编译原理\实验2 语法分析\PM.txt
文件 60 2014-05-19 21:35 编译原理\实验2 语法分析\RP.txt
文件 22 2014-05-19 20:49 编译原理\实验2 语法分析\SP.txt
文件 24915 2014-05-19 21:20 编译原理\实验3 语义分析和中间代码生成\GG.CPP
文件 3353 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\GG.DSP
文件 512 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\GG.DSW
文件 50176 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\GG.ncb
文件 48640 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\GG.OPT
文件 1327 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\GG.PLG
文件 138 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\string.txt
文件 96 2014-05-19 21:30 编译原理\实验3 语义分析和中间代码生成\test.txt
文件 253 2014-05-19 21:37 编译原理\实验3 语义分析和中间代码生成\token.txt
文件 215603 2014-05-27 23:03 编译原理\实验报告.doc
目录 0 2014-05-19 21:38 编译原理\实验1 词法分析
............此处省略6个文件信息
评论
共有 条评论