資源簡(jiǎn)介
c0是一個(gè)簡(jiǎn)化版的c源碼編譯器,符合大多數(shù)學(xué)校的編譯原理課程需要,可擴(kuò)充。

代碼片段和文件信息
#include“l(fā)exical.h“
/*
?*打開源代碼文件
?*/
bool?Lexical::openSourceFile()
{
cout<<“請(qǐng)輸入要打開的文件的名字:“< cin>>fName;
fin=fopen(fName“r“);??//返回值:文件順利打開后,指向該流的文件指針就會(huì)被返回。如果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在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ǎn)‘&&ch<=‘z‘?||?ch>=‘A‘?&&?ch<=‘Z‘)
{?
k=0;
do{
if(k {?
a[k]=ch;
k++;
}
if(-1==getChar())
{
return?-1;
}
}while(ch>=‘a(chǎn)‘&&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‘);?/*獲取數(shù)字的值*/
k--;
if(k>nmax)
{
printf(“數(shù)字的值超出上限!\n“);
}
}
else
{
if(ch==‘=‘)?????????????/*檢測(cè)賦值符號(hào)*/
{
sym=becomes;
if(-1==getChar())
{
return?-1;
}
}
else
{
if(ch==‘(‘)?????????/*檢測(cè)到左括號(hào)*/
{
sym=lparen;
if(-1==getChar())
{
return?-1;
}
}
else
{
if(ch==‘)‘)??????????/*檢測(cè)到右括號(hào)*/
{
sym=rparen;
if(-1==getChar())
{
return?-1;
}
}
else
{
if(ch==‘{‘) /*檢測(cè)到左大括號(hào)*/
{
sym=lbraces;
if(-1==getChar())
{
return?-1;
}
}
else
{
if(ch==‘}‘) /*檢測(cè)到右大括號(hào)*/
{
sym=rbraces;
if(-1==getChar())
{
return?-1;
}
}
else
{
/*?當(dāng)符號(hào)不滿足上述條件時(shí),全部按照單字符號(hào)處理*/
sym=ssym[ch];
if(!endOfFileFlag)
{
if(-1==getChar())
{
return?-1;
}
}
}
}
}
}
}
}
}
return?0;
}
/*
?*判斷變量定義和自定義函數(shù)定義,回退時(shí)使用
?*/
void?Lexical::rollBack()
{
cc--;
ch=line[cc-1];
sym=ident;
}
/*
?*返回當(dāng)前行緩沖
?*/
char?*?Lexical::getLine()
{
return?line;
}
/*
?*返回當(dāng)前字符的位置
?*/
int?Lexical::getCc()
{
return?cc;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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\ob
?????文件????????537??2015-12-14?17:14??c0源碼\c0_compiler\ob
?????文件??????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
- 上一篇:銑削加工
- 下一篇:air720.zip
評(píng)論
共有 條評(píng)論