?? 詞法分析.c
字號:
#include <stdio.h>
#include <string.h>
char prog[80],token[8];
char ch;
int syn,p,m,n,sum,kk;
char *rwtab[6]={"begin","if","then","while","do","end"};
main()
{
p=0;
printf("\n please input string:\n");
do {
scanf("%c",&ch);
prog[p++]=ch;
//輸入源程序串,送到緩沖區prog[p++]中;
}while(ch!='#');
p=0;
do
{
scaner();
switch(syn)
{
case 11:;break;
case -1:輸出(錯誤);break;
default:輸出(其它單詞二元組);
}
}while(syn!=0);
}
scaner()
{
for(n=0;n<8;n++)
token[n]=NULL;
ch=proc[p++];//下一個字符;
while(ch==' ')
ch=proc[p++];//讀下一個字符;
if((ch<'z'&&ch>'a')||(ch>'A'&&ch<'Z'))//()ch是字母字符
{
while((ch<'z'&&ch>'a')||(ch>'A'&&ch<'Z')||(ch>'0'&&ch<'9'))//ch為字母字符或數字字符
{
token[m++]=ch;//ch=>token;
ch=proc[p++];//讀下一個字符;
}
token[m++]='\0';
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
else if (ch<'9'&&ch>'0')//ch是數字字符
{
while(ch<'9'&&ch>'0')//ch為數字字符
{
sum=sum*10+ch-'0';
ch=proc[p++];
}
}
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;
p--; //回退一個字符;
}
break;
case '>':
m=0;token[m++]=ch;
ch=prog[p++]//讀下一個字符;
if (ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
p--; //回退一個字符;
}
break;
case':': syn=26;break;
case'+': syn=13;break;
case'-': syn=14;break;
case'*': syn=15;break;
case'/': syn=16;break;
case'#': syn=0;break;
default: syn=-1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -