當前位置:編程學習大全網 - 源碼下載 - 編譯原理課程設計-詞法分析器設計(C語言)

編譯原理課程設計-詞法分析器設計(C語言)

#include?"stdio.h"?/*定義I/O庫所用的某些宏和變量*/

#include?"string.h"?/*定義字符串庫函數*/

#include?"conio.h"?/*提供有關屏幕窗口操作函數*/

#include?"ctype.h"?/*分類函數*/

char?prog[80]={'\0'},

token[8];?/*存放構成單詞符號的字符串*/

char?ch;

int?syn,/*存放單詞字符的種別碼*/

n,

sum,/*存放整數型單詞*/

m,p;/*p是緩沖區prog的指針,m是token的指針*/

char?*rwtab[6]={"begin","if","then","while","do","end"};

void?scaner(){

m=0;

sum=0;

for(n=0;n<8;n++)

token[n]='\0';

ch=prog[p++];

while(ch=='?')

ch=prog[p++];

if(isalpha(ch))/*ch為字母字符*/{

while(isalpha(ch)||isdigit(ch))/*ch?為字母字符或者數字字符*/{

token[m++]=ch;

ch=prog[p++];}

token[m++]='\0';

ch=prog[p--];

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)/*字符串的比較*/{

syn=n+1;

break;}}

else

if(isdigit(ch))/*ch是數字字符*/{

while(isdigit(ch))/*ch是數字字符*/{

sum=sum*10+ch-'0';

ch=prog[p++];}

ch=prog[p--];

syn=11;}

else

switch(ch){

case'<':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='>'){

syn=21;

token[m++]=ch;}

else?if(ch=='='){

syn=22;

token[m++]=ch;}

else{

syn=20;

ch=prog[p--];}

break;

case'>':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=24;

token[m++]=ch;}

else{

syn=23;

ch=prog[p--];}

break;

case':':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=18;

token[m++]=ch;}

else{

syn=17;

ch=prog[p--];}

break;

case'+':syn=13;token[0]=ch;break;

case'-':syn=14;token[0]=ch;break;

case'*':syn=15;token[0]=ch;break;

case'/':syn=16;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

default:syn=-1;}}

main()

{

printf("\n\nThe?significance?of?the?figures:\n"

"1.figures?1?to?6?said?Keyword\n"

"2.figures?10?and?11?said?Other?indicators\n"

"3.figures?13?to?28?said?Operators\n");

p=0;

printf("\nplease?input?string:\n");

do?{

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

do{

scaner();

switch(syn){

case?11:?printf("(%d,%d)\n",syn,sum);break;

case?-1:?printf("\n?ERROR;\n");break;

default:?printf("(%d,%s)\n",syn,token);

}

}while(syn!=0);

getch();

}

程序測試結果

對源程序begin?x:=9:?if?x>9?then?x:=2*x+1/3;?end?#的源文件,經過詞法分析後輸出如下圖5-1所示:

具體的妳在修改修改吧

  • 上一篇:目前都有哪些系統的智能手機
  • 下一篇:求csol最新刷榮譽的辦法
  • copyright 2024編程學習大全網