• 大小: 15KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: c0编译器  源码  

资源简介

c0是一个简化版的c源码编译器,符合大多数学校的编译原理课程需要,可扩充。

资源截图

代码片段和文件信息

#include“lexical.h“

/*
 *打开源代码文件
 */
bool Lexical::openSourceFile()
{
cout<<“请输入要打开的文件的名字:“< cin>>fName;
fin=fopen(fName“r“);  //返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中
if(NULL!=fin)
{
return true;
}
else
{
return false;
}
}

int Lexical::getChar()
{
if(cc==ll)
{
if(feof(fin))
{
// printf(“program incomplete“);
endOfFileFlag=true;
return -1;
}
ll=0;
cc=0;
ch=‘ ‘;
while(10!=ch)
{
if(EOF==fscanf(fin“%c“&ch))
{
line[ll]=0;
break;
}
printf(“%c“ch);
line[ll]=ch;
ll++;
}
}
ch=line[cc];
cc++;
return 0;
}

int Lexical::getSym()
{
int ijk;
while(ch==‘ ‘||ch==10||ch==9)  //忽略空格、换行、TAB 
{
if(-1==getChar())
{
return -1;
}
}
if(ch>=‘a‘&&ch<=‘z‘ || ch>=‘A‘ && ch<=‘Z‘)

k=0;
do{
if(k
a[k]=ch;
k++;
}
if(-1==getChar())
{
return -1;
}
}while(ch>=‘a‘&&ch<=‘z‘|| ch>=‘A‘ && ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘);
a[k]=0;
strcpy(ida);
i=0;
j=norw-1;
do{
k=(i+j)/2;
if(strcmp(idword[k])<=0)
{
j=k-1;
}
if(strcmp(idword[k])>=0)
{
i=k+1;
}

}while(i<=j);
if(i-1>j)
{
sym=wsym[k];
}
else
{
sym=ident;
}
}
else
{
if(ch>=‘0‘&&ch<=‘9‘)
{
k=0;
num=0;
sym=number;
do{
num=10*num+ch-‘0‘;
k++;
if(-1==getChar())
{
return -1;
}
}while(ch>=‘0‘&&ch<=‘9‘); /*获取数字的值*/
k--;
if(k>nmax)
{
printf(“数字的值超出上限!\n“);
}
}
else
{
if(ch==‘=‘)             /*检测赋值符号*/
{
sym=becomes;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘(‘)         /*检测到左括号*/
{
sym=lparen;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘)‘)          /*检测到右括号*/
{
sym=rparen;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘{‘) /*检测到左大括号*/
{
sym=lbraces;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘}‘) /*检测到右大括号*/
{
sym=rbraces;
if(-1==getChar())
{
return -1;
}
}
else
{
/* 当符号不满足上述条件时,全部按照单字符号处理*/
sym=ssym[ch];
if(!endOfFileFlag)
{
if(-1==getChar())
{
return -1;
}
}
}
}
}
}
}
}
}
return 0;
}

/*
 *判断变量定义和自定义函数定义,回退时使用
 */
void Lexical::rollBack()
{
cc--;
ch=line[cc-1];
sym=ident;
}

/*
 *返回当前行缓冲
 */
char * Lexical::getLine()
{
return line;
}

/*
 *返回当前字符的位置
 */
int Lexical::getCc()
{
return cc;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3033  2015-12-20 21:41  c0源码\c0_compiler\lexical.cpp

     文件        480  2015-12-13 11:15  c0源码\c0_compiler\lexical.h

     文件       3854  2015-12-13 11:19  c0源码\c0_compiler\main.cpp

     文件       2258  2015-12-13 11:19  c0源码\c0_compiler\main.h

     文件       1585  2015-12-14 17:15  c0源码\c0_compiler\object.cpp

     文件        537  2015-12-14 17:14  c0源码\c0_compiler\object.h

     文件      20875  2015-12-21 17:33  c0源码\c0_compiler\syntsemant.cpp

     文件        847  2015-12-13 11:20  c0源码\c0_compiler\syntsemant.h

     文件       2088  2015-12-14 17:01  c0源码\c0_compiler\tabulation.cpp

     文件        872  2015-12-13 10:25  c0源码\c0_compiler\tabulation.h

     文件        303  2015-12-19 20:21  c0源码\c0_interpret\c0_interpret.cpp

     文件       4557  2015-12-19 23:18  c0源码\c0_interpret\c0_interpret.h

     目录          0  2015-12-30 13:01  c0源码\c0_compiler

     目录          0  2015-12-30 13:01  c0源码\c0_interpret

     目录          0  2016-04-03 15:16  c0源码

----------- ---------  ---------- -----  ----

                41289                    15


评论

共有 条评论