91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 272KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2023-04-24
  • 語言: C/C++
  • 標簽:

資源簡介

這次實驗是用C語言對pl/0的編譯器進行擴展,實現了一下幾個功能: (1)給PL/0語言增加像C語言那樣的形式為/ …… /的注釋。 (2)給PL/0語言增加帶else子句的條件語句和exit語句。 (3)給PL/0語言增加輸入輸出語句。 (4)給PL/0語言增加帶參數的過程。 (5)給PL/0語言增加布爾類型。 (6)給PL/0語言增加數組類型。 (7)給PL/0語言增加函數類型。 (8)給PL/0語言增加實數類型。 (9)分離解釋器和編譯器為兩個獨立的程序。 壓縮包中還有實驗要求以及參考文檔等,希望對大家編寫pl0編譯器有幫助。

資源截圖

代碼片段和文件信息

//?pl/0?compiler?with?code?generation
#include?
#include?
#include?
#include?
#include?“pl0.h“

void?error(long?n){
????long?i;

????printf(“?****“);
????for?(i=1;?i<=cc-1;?i++){
printf(“?“);
????}
????printf(“^%2d\n“n);
????err++;
}

void?getch()?{??????????//輸出源程序
????if(cc==ll){
if(feof(infile)){
????printf(“************************************\n“);
????printf(“??????program?incomplete\n“);
????printf(“************************************\n“);
????exit(1);
}
ll=0;?cc=0;
printf(“%5d?“?cx);
while((!feof(infile))&&((ch=getc(infile))!=‘\n‘)){?????//輸出一行原代碼
????printf(“%c“ch);
????ll=ll+1;?line[ll]=ch;
}
printf(“\n“);
ll=ll+1;?line[ll]=‘?‘;
????}
????cc=cc+1;?ch=line[cc];
}

void?getsym(){
????long?ijk;
????int?flag=0;
double?t=1.0;?????//標記小數點后的位數
double?numt=0z=0;???//小數部分的值
????while(ch==‘?‘||ch==‘\t‘){
getch();
????}
????if(isalpha(ch)){? //?identified?or?reserved??開始進行詞法分析
k=0;
do{
????if(k a[k]=ch;?k=k+1;
????}
????getch();
}while(isalpha(ch)||isdigit(ch));
if(k>=kk){
????kk=k;
}else{
????do{
kk=kk-1;?a[kk]=‘?‘;
????}while(k }
strcpy(ida);?i=0;?j=norw-1;?????//把符號串(如var)放入id中
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];??//??sym返回詞法單元的類型?如果i-1》j是保留字
}else{
????sym=ident;????//否則是定義的標識符

}
????}else?if(isdigit(ch)){?//?number
k=0;?num=0;?
do{
????num=num*10+(ch-‘0‘);
????k=k+1;?getch();
}while(isdigit(ch));?
if(ch==‘.‘){???//遇到小數點說明是實型數據
getch();
if(isdigit(ch)){
while(isdigit(ch)){
t/=10;
num=num+(ch-‘0‘)*t;
????k++;
getch();
}
????sym=realsym;
}
else?if(ch==‘.‘){?????//又遇到一個點說明是數組的定義
????????????sym=intersym;
cc=cc-2;
}
else{
error(57);
}
}
else{
sym=intersym;
}
if(k>nmax){
????error(31);
}
????}else?if(ch==‘:‘){
getch();
if(ch==‘=‘){
????sym=becomes;?getch();
}else{
????sym=nul;
}
????}else?if(ch==‘/‘){???//新增
getch();
if(ch==‘*‘){
flag++;
getch();
while(flag>0){
while(ch!=‘*‘){
getch();
}
getch();
if(ch==‘/‘)
flag--;
}
getch();
getsym();
}
else{
sym=ssym[(unsigned?char)‘/‘];
}
}
else?if(ch==‘*‘){
getch();
if(ch==‘/‘){
getch();
if(ch==‘*‘){
flag=0;
sym=ssym[(unsigned?char)‘*‘];
flag++;
getch();
????while(flag>0){
while(ch!=‘*‘){
getch();
}
getch();
????if(ch==‘/‘)
????flag--;
}
getch();
}
else{
printf(“a?superflous?note?symbol?“);
sym=nul;
}
}
else{
sym=ssym[(unsigned?char)‘*‘];
}
}
else?if(ch==‘<‘){
getch();
????if(ch==‘=‘){
????sym=leq;?getch();
}else?if(ch==‘>‘){
????sym=neq;?getch();
}else{
????sym=lss;
}
????}else?i

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????37694??2011-05-15?16:49??PB08210256\編譯器\pl0.c

?????文件???????4636??2011-05-15?09:50??PB08210256\編譯器\pl0.h

?????文件?????143432??2011-05-15?15:21??PB08210256\編譯器\PL0編譯器.exe

?????文件???????6239??2011-05-15?10:45??PB08210256\解釋器\interpret.cpp

?????文件????????476??2011-05-15?10:06??PB08210256\解釋器\pl0.h

?????文件?????217160??2011-05-15?10:48??PB08210256\解釋器\pl0解釋器.exe

?????目錄??????????0??2011-05-15?16:51??PB08210256\編譯器

?????目錄??????????0??2011-05-15?16:51??PB08210256\解釋器

?????目錄??????????0??2011-05-15?16:51??PB08210256

?????文件??????20992??2011-05-09?00:50??測試程序.doc

?????文件??????15360??2011-05-15?16:56??錯誤記號.doc

?????文件?????169374??2011-04-14?09:59??project參考資料.pdf

?????文件??????23552??2011-04-29?00:26??課程實踐?(1).doc

-----------?---------??----------?-----??----

???????????????638915????????????????????13


評論

共有 條評論

相關資源