資源簡介
詞法分析器、語法分析器、語義分析器的簡單程序

代碼片段和文件信息
#include??????/*定義I/O庫所用的某些宏和變量*/
#include?????/*定義字符串庫函數*/
void?scaner();
char?prog[80]token[8];
char?ch;
int?synpmnsum;???/*p是緩沖區prog的指針m是token的指針*/
char?*rwtab[6]={“begin““if““then““while““do““end“};
void?main()
{???char?flag=‘r‘;??int?count;
????while(flag?==?‘r‘)
{???for(n=0;n<80;n++)??prog[n]=NULL;
????p=0;?
printf(“\n?請輸入源程序字符串(以#號結束):?\n“);?
printf(“?“);
count=1;
????do{?
ch=getchar();?
if(count==1)
{ if(ch!=‘\n‘)?{?prog[p++]=ch;?}?}
else
{ prog[p++]=ch;??}?//*輸入源程序字符串,送到緩沖區prog[p++]中;*/
count++;
}while(ch!=‘#‘);
????????p=0;
????printf(“\n?經詞法分析后輸出的二元組序列:?\n“);
????????do
{??scaner();????
???????????switch(syn)
???{
???????case?11:?printf(“?(%d%d)“synsum);?break;/*輸出(數的二元組);break;*/
???????case?-1:?printf(“?error“);?break;??/*輸出(錯誤);break;*/
???????default:?printf(“?(%d%s)“syntoken);?/*輸出(其他單詞二元組);*/
???}
}while(syn!=0);????
????????printf(“\n\n?返回請選擇‘r‘退出請選擇其他:\n“);??
????????printf(“?“);scanf(“%s“&flag);??
}
????printf(“\n“);
}
/////////////////////////////////////////////////////////////////////////////
void?scaner()
{??for(n=0;n<8;n++)?token[n]=NULL;?
????ch=prog[p++];??/*讀下一個字符;*/
while(ch?==?‘?‘)?ch=prog[p++];?/*讀下一個字符;*/
if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘z‘))?/*ch是字母字符*/
{???m=0;
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))/*ch是字母字符或數字字符*/
{??token[m++]=ch;
???ch=prog[p++];??/*讀下一個字符;*/
}
token[m++]=‘\0‘;?ch=prog[--p];??/*回退一個字符;*/
????syn=10;
for(n=0;n<6;n++)
if(strcmp(tokenrwtab[n])?==?0)
{??syn=n+1;???/*給出syn值;*/
??break;
}
}
else?
if(ch>=‘0‘&&ch<=‘9‘)??/*ch是數字字符*/
{???m=0;?sum=0;
while(ch>=‘0‘&&ch<=‘9‘)??/*ch為數字字符*/
{??sum?=sum*10+ch-‘0‘;
???ch=prog[p++];???/*讀下一個字符;*/
}
????token[m++]=‘\0‘;?ch=prog[--p];?/*回退一個字符;*/
syn=11;
}
????else
switch(ch)
{??
case‘<‘:?m=0;?token[m++]=ch;
?????????????????ch=prog[p++];???/*讀下一個字符;*/
?????????if(ch?==?‘>‘)
?{??syn=21;
????????????????????token[m++]=ch;??token[m++]=‘\0‘;
?}
?????? ?????else?if(ch==‘=‘)
?{??syn=22;
????????????????????token[m++]=ch;??token[m++]=‘\0‘;
?}
? ?????????else
?{??syn=20;?token[m++]=‘\0‘;??ch=prog[--p];/*回退一個字符;*/}
?????????break;
case‘>‘:?m=0;?token[m++]=ch;
?????ch=prog[p++];??/*讀下一個字符;*/???
?????if(ch?==?‘=‘)
?{??syn=24;
????token[m++]=ch;???token[m++]=‘\0‘;?
?}
?else
?{??syn=23;
????token[m++]=‘\0‘;?ch=prog[--p];?/*回退一個字符;*/
?}
?break;
case‘:‘:?m=0;??token[m++]=ch;
?????ch=prog[p++];???/*讀下一個字符;*/???
?????if(ch?==?‘=‘)
?{??syn=18;
????token[m++]=ch;
?}
?else
?{??syn=17;
????token[m++]=‘\0‘;?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;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????198144??2009-06-02?22:58??語義分析\語義分析.doc
?????文件???????7954??2009-06-02?21:49??語義分析\語義分析.cpp
?????文件???????3441??2009-06-02?22:08??詞法分析\詞法分析.cpp
?????文件?????124928??2009-06-02?22:27??詞法分析\詞法分析.doc
?????文件?????168448??2009-06-02?22:29??語法分析\語法分析.doc
?????文件???????5127??2009-06-02?22:21??語法分析\語法分析.cpp
?????目錄??????????0??2009-06-02?23:53??語義分析
?????目錄??????????0??2009-06-02?23:53??詞法分析
?????目錄??????????0??2009-06-02?23:53??語法分析
-----------?---------??----------?-----??----
???????????????508042????????????????????9
- 上一篇:計算機圖形學試卷
- 下一篇:微服務架構的分布式事務解決方案完整31講-龍果學院
評論
共有 條評論