資源簡介
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\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
評論
共有 條評論