用C語言寫的Pascal語言詞法分析器

2021-04-06 19:45:56 字數 3140 閱讀 5162

雖然只是個詞法分析器,但是重拾c語言好難!好久沒用過c了。放在這兒勉勵自己做事一定要有始有終

/*trans.c -main,trans */

#include

#include

#include

#include

//char *name=;

//char *sign=;

int match_code=0;

char buffer1[256];

char buffer2[256];

char *infile;

char* outfile;

char* errfile;

char token[15];

int token_index=0;

char ch;

int buffer1empty=1;

int buffer2empty=1;

int endoffile=0;

//int reserve_(int* code)  //本來自己寫了乙個比較保留字段的函式,但是不知道什麼原因工作不是很良好,鑑於時間很緊就沒有用

////     }

//     return match;            

//}//void write_dyd(int code,file* fp)  //這個是針對上乙個函式的寫入檔案流的函式,同樣也放棄了

//// fputs(name[code],fp);

// fputc(' ',fp);

// fputs(name[code+1],fp);

// fputc('/n',fp);

//}void readintobuffer(char buffer[256],file* fp)

else

buffer[i]=eof;

break;

case '/t':

while(c=='/t')

c=fgetc(fp);

if(c!=eof)

else

buffer[i]=eof;        //其他情況就把檔案結束符寫到緩衝區裡面去

break;

case eof:

buffer[i]=eof;

break;

default:

buffer[i]=c;

break;}}

}int read_buffer(file* fp,int* index) //這個函式從兩個緩衝區中的乙個讀出乙個字元賦給全域性變數ch,緩衝區空則呼叫readinotbuffer函式寫入緩衝區 }}

if(readfrom==buffer1)

buffer1empty=0;

else

if(readfrom[*index]!=eof&&*index<256)

else

else

if(*index>255)

else

} ch=readfrom[*index];

*index=*index+1;}}

return 0;

}void translate(const char *infile,const char *outfile,const char *errfile)         //詞法分析器主要功能函式

token[token_index]='/0';

token_index=0;

index=((index-1)==-1)?255:index-1;     //每個緩衝區為256個字元,若回退下標的時候處在緩衝區頭,則切換到上一次讀的緩衝區尾

int blank=16-strlen(token);

while(blank!=0)

fputs(token,ofp);

fputc(' ',ofp);

fputs("11/n",ofp);

continue;

}if(isalpha((int)ch)&&!endoffile)

token[token_index]='/0';

token_index=0;

index=((index-1)==-1)?255:index-1;

if(!strcmp(token,"begin"))

if(!strcmp(token,"end"))

if(!strcmp(token,"integer"))

if(!strcmp(token,"if"))

if(!strcmp(token,"then"))

if(!strcmp(token,"else"))

if(!strcmp(token,"function"))

if(!strcmp(token,"read"))

if(!strcmp(token,"write"))

else

fputs(token,ofp);

fputc(' ',ofp);

fputs("10/n",ofp);

}continue;

}if((ch=='=')&&!endoffile)

if((ch=='<')&&!endoffile)

else

else

else}}

}if((ch=='>')&&!endoffile)

else

else}}

if((ch=='-')&&!endoffile)

if((ch=='*')&&!endoffile)

if((ch==':')&&!endoffile)

else

else}}

if((ch=='(')&&!endoffile)

if((ch==')')&&!endoffile)

if((ch==';')&&!endoffile)

if((ch=='/n')&&!endoffile)

}fputs("             eof 25/n",ofp);

fclose(ifp);

fclose(ofp);

fclose(efp);

}           

int main(int argc, char *argv)

translate(infile,outfile,errfile);

system("pause"); 

}

c語言 詞法分析

參考 c陷阱與缺陷 一 c語言對符號的分析方法歸納為乙個很簡單的規則 每乙個符號應該包含盡可能多的字元,也就是說,編譯器將程式分解成符號的方法時,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,...

pascal語言的版本

pascal有5個主要的版本,分別是 unextended pascal extended pascal object oriented extensions to pascal borland pascal和delphi object pascal。其中,unextended pascal ext...

用C語言寫PHP擴充套件

1 預定義 在home目錄,也可以其他任意目錄,寫乙個檔案,例如caleng module.def 內容是你希望定義的函式名以及引數 int a int x,int y string b string str,int n 2 到php原始碼目錄的ext目錄 cd usr local php 5.4....