¡¡¡¡/* ÔÚÊʵ±µÄλÖÃÏÔʾ´íÎó */
¡¡¡¡void error(int n)
¡¡¡¡{
¡¡¡¡¡¡char space[81];
¡¡¡¡¡¡memset(space,32,81);
¡¡¡¡¡¡space[cc-1]=0; /* ³ö´íʱµ±Ç°·ûºÅÒѾ­¶ÁÍ꣬ËùÒÔcc-1 */
¡¡¡¡¡¡printf("****%s!%d\n",space,n);
¡¡¡¡¡¡fprintf(fa1,"****%s!%d\n",space,n);
¡¡¡¡¡¡err++;

¡¡¡¡}

¡¡¡¡/* ´Ê·¨·ÖÎö£¬»ñȡһ¸ö·ûºÅ */
¡¡¡¡int getsym()
¡¡¡¡{
¡¡¡¡¡¡int i,j,k;
¡¡¡¡¡¡while(ch==' '||ch==10||ch==9) /* ºöÂÔ¿Õ¸ñ¡¢»»ÐкÍTAB */
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡}
¡¡¡¡¡¡if(ch>='a'&&ch<='z')
¡¡¡¡¡¡{ ¡¡¡¡¡¡¡¡¡¡¡¡/* Ãû×Ö»ò±£Áô×ÖÒÔa..z¿ªÍ· */
¡¡¡¡¡¡¡¡k=0;
¡¡¡¡¡¡¡¡do
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡if(k<al)
¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡a[k]=ch;
¡¡¡¡¡¡¡¡¡¡¡¡k++;
¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9');
¡¡¡¡¡¡¡¡a[k]=0;
¡¡¡¡¡¡¡¡strcpy(id,a);
¡¡¡¡¡¡¡¡i=0;
¡¡¡¡¡¡¡¡j=norw-1;
¡¡¡¡¡¡¡¡do /* ËÑË÷µ±Ç°·ûºÅÊÇ·ñΪ±£Áô×Ö */
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡k=(i+j)/2;
¡¡¡¡¡¡¡¡¡¡if(strcmp(id,word[k])<=0)j=k-1;
¡¡¡¡¡¡¡¡¡¡if(strcmp(id,word[k])>=0)i=k+1;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡while(i<=j);
¡¡¡¡¡¡¡¡if(i-1>j)sym=wsym[k]; else sym=ident; /* ËÑË÷ʧ°ÜÔò£¬ÊÇÃû×Ö»òÊý×Ö */
¡¡¡¡¡¡}
¡¡¡¡¡¡else
¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡if(ch>='0'&&ch<='9')
¡¡¡¡¡¡¡¡{ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡/* ¼ì²âÊÇ·ñΪÊý×Ö£ºÒÔ0..9¿ªÍ· */
¡¡¡¡¡¡¡¡¡¡k=0;
¡¡¡¡¡¡¡¡¡¡num=0;
¡¡¡¡¡¡¡¡¡¡sym=number;
¡¡¡¡¡¡¡¡¡¡do
¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡num=10*num+ch-'0';
¡¡¡¡¡¡¡¡¡¡¡¡k++;
¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡while(ch>='0'&&ch<='9'); /* »ñÈ¡Êý×ÖµÄÖµ */
¡¡¡¡¡¡¡¡¡¡k--;
¡¡¡¡¡¡¡¡¡¡if(k>nmax)error(30);
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡if(ch==':') /* ¼ì²â¸³Öµ·ûºÅ */
¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡if(ch=='=')
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=becomes;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=nul; /* ²»ÄÜʶ±ðµÄ·ûºÅ */
¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡if(ch=='<') /* ¼ì²âСÓÚ»òСÓÚµÈÓÚ·ûºÅ */
¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if(ch=='=')
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=leq;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=lss;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if(ch=='>') /* ¼ì²â´óÓÚ»ò´óÓÚµÈÓÚ·ûºÅ */
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if(ch=='=')
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=geq;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=gtr;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sym=ssym[ch]; /* µ±·ûºÅ²»Âú×ãÉÏÊöÌõ¼þʱ£¬È«²¿°´ÕÕµ¥×Ö·û·ûºÅ´¦Àí */
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡getchdo;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡return 0;
¡¡¡¡¡¡}