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

  • 大小: 155KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-10
  • 語言: C/C++
  • 標簽: 編譯器??pl0??C語言??

資源簡介

C語言編寫的pl0語言編譯器 pl0作為編譯原理最基礎的學習編譯原理的一個完備語言,最適合作為編寫編譯器的入門語言。

資源截圖

代碼片段和文件信息

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

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

????printf(“?****“);
????for?(i=1;?i<=cc-1;?i++){
printf(“?“);
????}
????printf(“^%2ld\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(“%5ld?“?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;

????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;
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(isdigit(ch)){?//?number
k=0;?num=0;?sym=number;
do{
????num=num*10+(ch-‘0‘);
????k=k+1;?getch();
}while(isdigit(ch));
if(k>nmax){
????error(31);
}
????}else?if(ch==‘:‘){
getch();
if(ch==‘=‘){
????sym=becomes;?getch();
}else{
????sym=nul;
}
????}else?if(ch==‘<‘){
getch();
if(ch==‘=‘){
????sym=leq;?getch();
}else?if(ch==‘>‘){
????sym=neq;?getch();
}else{
????sym=lss;
}
????}else?if(ch==‘>‘){
getch();
if(ch==‘=‘){
????sym=geq;?getch();
}else{
????sym=gtr;
}
????}else{
sym=ssym[(unsigned?char)ch];?getch();
????}
}

void?gen(enum?fct?x?long?y?long?z){
????if(cx>cxmax){
printf(“program?too?long\n“);
exit(1);
????}
????code[cx].f=x;?code[cx].l=y;?code[cx].a=z;
????cx=cx+1;
}

void?test(unsigned?long?s1?unsigned?long?s2?long?n){
????if?(!(sym?&?s1)){
error(n);
s1=s1|s2;
while(!(sym?&?s1)){
????getsym();
}
????}
}

void?enter(enum?object?k){ //?enter?object?into?table
????tx=tx+1;
????strcpy(table[tx].nameid);
????table[tx].kind=k;
????switch(k){
case?constant:
????if(num>amax){
error(31);
num?=?0;
????}
????table[tx].val=num;
????break;
case?variable:
????table[tx].level=lev;?table[tx].addr=dx;?dx=dx+1;
????break;
case?proc:
????table[tx].level=lev;
????break;
????}
}

long?position(char*?id){ //?find?identifier?id?in?table
????long?i;

????strcpy(table[0].nameid);
????i=tx;
????while(strcmp(table[i].nameid)!=0){
i=i-1;
????}
????return?i;
}

void?constdeclaration(){
????if(sym==ident){
getsym();
if(sym==eql||sym==becomes){
????if(sym==becomes){
error(1);
????}
????getsym();
????if(sym==number){
enter(constant);?getsym();
????}e

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2804??2012-02-12?09:30??pl0\include\pl0.h
?????文件???????11892??2012-02-12?09:30??pl0\src\pl0.c
?????文件?????????281??2012-02-12?09:30??pl0\sample\multiply.pl0
?????文件????????1530??2012-02-12?09:30??pl0\sample\multiply.res
?????文件?????????716??2012-02-12?09:30??pl0\sample\tests.pl0
?????文件????????4481??2012-02-12?09:30??pl0\sample\tests.res
?????文件??????162903??2012-02-13?01:41??pl0\doc\pl0.pdf
?????文件?????????408??2012-02-12?09:30??pl0\Makefile
?????文件?????????130??2012-02-12?09:30??pl0\make.simple
?????文件????????1787??2012-02-13?01:46??pl0\README
?????目錄???????????0??2012-02-12?09:30??pl0\include\
?????目錄???????????0??2012-02-12?09:30??pl0\src\
?????目錄???????????0??2012-02-12?09:30??pl0\sample\
?????目錄???????????0??2012-02-12?09:31??pl0\test\
?????目錄???????????0??2012-02-13?01:45??pl0\doc\
?????目錄???????????0??2012-02-13?01:46??pl0\

評論

共有 條評論