当前位置:首页 > 编译原理课程设计
编译原理课程设计
3.2 扫描子程序的算法思想:
首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来存放整型单词;③syn用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。
图 3-2
第 5 页
编译原理课程设计
四、详细设计
词法分析程序的C++语言程序源代码: #include\
#include\ //包含getch函数的头文件 #include\ //包含exit函数的头文件 #include
char prog[81],token[8],ch,tmp; int syn,p,m,n,sum,rows;
char *rwtab[6]={\void scaner(); void main() { FILE *out; FILE *in; rows=1;
if((out=fopen(\{printf(\getch(); exit(1); }
if((in=fopen(\{printf(\getch(); exit(1);
}/* printf(\rewind(in); rewind(out);
fprintf(out,\
-第 6 页 -
编译原理课程设计
do{ p=0; do
{ /*scanf(\ if(p==80)
{printf(\ getch(); exit(1); }
ch=fgetc(in); prog[p++]=ch;
}while(ch!=EOF&&ch!='\\n'); prog[p]='#'; tmp=ch; p=0; do{ scaner(); switch(syn)
{case 11:fprintf(out,\ break; case
-1:printf(\
have
input
a
wrong
string,rows
cols=(%d,%d)\\n\ getch(); exit(0); default:if(syn!=0)
fprintf(out,\ break; }
}while(syn!=0); if(tmp=='\\n') rows++; }while(ch!=EOF);
第 7 页
编译原理课程设计
fclose(in); fclose(out); }
void scaner() { sum=0;
for(m=0;m<8;m++)token[m++]=NULL; ch=prog[p++]; m=0;
while((ch==' ')||(ch=='\\n'))ch=prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{ token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } }
else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--;
-第 8 页 -
共分享92篇相关文档