亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pl0語法分析器遞歸子程序法.c

?? 程序功能:PL/0語言語法分析程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
//程序名: yufashini.cpp 
//作者:小萬(wbaobao)
//郵箱:wbaobao#zj.com
//QQ:421404493
//創(chuàng)建日期:2004.10
//程序功能:PL/0語言語法分析程序,檢測pl/0源程序的語法是否正確
//程序不足之處:語言中對分程序的定義中沒有包含常量的定義說明。錯誤處理能力不是很強。
/*各個符號和產生式說明
對應的函數        產生式             產生式的開始符號集合
void S();程序     S-->F.              p,m,e,k,q,g,n,r,f,.,;,
void F();分程序    F-->B(Y|GY)|G(Y|BY)|Y       p,m,e,k,q,g,n,r,f,.,;,
void B();變量說明部分 pe(,e)*;                 p
void G();過程說明部分 CF;|CF;G                m
void Y();語句     Y-->eaA|kToY|qToY|ge|n(e(,e)*)|r(e(,e)*)|fY(;Y)*j|<空> e,k,q,g,n,r,f,.,;,
void C();過程首部   C-->me;                               m
void A();表達式    A-->(+|-|<空>)N|A(+|-)N                     +,-,e,d,(
void N();項      N-->I|N(*|/)I                              e,d,(
void I();因子     I-->e|d|(A)                                 e,d,( 
void X();關系運算符  X-->#|<|>|b                                #,<,>,b
void T();//條件    T-->AXA|lA                                +,-,e,d,(,l
其中終結符的含義均為二元式中的類別碼所代表的單詞
(+,+);(-,-);(*,*);(/,/);((,();(),));(,,,);(;,;);(.,.);(#,#);(=,=);(>,>);(<,<);(:=,a);(>=,b);
(<=,c);(數字,d);(標識符,e);(begin,f);(call,g);(const,h);(do,i);(end,j);(if,k);(odd,l);
(procedure,m);(read,n);(then,o);(var,p);(while,q);(write,r);
*/
/*測試數據:
(PROCEDURE,m)(P,e)(;,;)
(VAR,p)(D,e)(;,;)
(PROCEDURE,m)(Q,e)(;,;)
(VAR,p)(X,e)(;,;)
(BEGIN,f)
(READ,n)((,()(X,e)(),))(;,;)
(D,e)(:=,a)(X,e)(;,;)
(WHILE,q)(X,e)(<,<)(0,d)
(DO,i)(CALL,g)(P,e)(;,;)
(END,j)(;,;)
(BEGIN,f)
(WRITE,r)((,()(D,e)(),))(;,;)
(CALL,g)(Q,e)(;,;)
(END,j)(;,;)
(BEGIN,f)
(CALL,g)(P,e)(;,;)
(END,j)(.,.)
//請將以上數據存為b.c(上面為詞法分析的結果)
*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

char token;
char tempword[25];
FILE *op;
int row;

void error(int wnum);
char word();
void S();//程序
void F();//分程序
void B();//變量說明部分
void G();//過程說明部分
void Y();//語句
void C();//過程首部
void A();//表達式
void N();//項
void I();//因子
void X();//關系運算符
void T();//條件


struct infoword
{
    char word[25];
    char type;
    int row;
 int error;
 infoword *next;
 infoword *pre;
};
infoword *head,*cur;
infoword *point;
 

void filltable(char *str,char t)
{
 //infoword newnode;
 int i=0;
 infoword *newnode=new infoword;
 strcpy(newnode->word,str);
 newnode->type=t; //putchar('q');
 newnode->row=row;
 newnode->error=i;
 newnode->pre=NULL;
 newnode->next=NULL;
 if(head==NULL)
 {
  point=head=newnode;//初始化point和head指針
  cur=newnode;//初始化cur指針
 }
 else
 {
  newnode->pre=cur;
  cur->next=newnode;
  cur=newnode;
 }

}
char find(char *str)
{
    infoword *tempp;//puts(str);
 tempp=head;
 while(tempp&&strcmp((tempp->word),str))tempp=tempp->next;
 if(tempp==NULL)return NULL;
 else return tempp->type;
}
int compare(char *str,char t)
{
 char a;
 a=find(str);
 if(a)
  if(a==t)
   return 1;//類型為要求類型
  error(44);//找到但不是要求類型
  error(42);//未找到
  return 0;
}
 


char word()//return a char
{
 //FILE *op;
 //op=fopen("b.c","r");

 char tempc;
 char tempx;
 char tempw[25];
 int i=0,j=0;
 while(!feof(op))
 {
      tempc=fgetc(op);
   strcpy(tempword,"");
   if(tempc==10)
   {
    row++;
    //printf("%d\n",row);
   }
    
  
   if(tempc==',')
   {
    tempx=fgetc(op);
             tempc=fgetc(op);
    if(tempc==')')
    {
     //putchar(tempx);
     if(tempx=='e')
     {
      
      fseek(op,-4l,1);//putchar(fgetc(op));fseek(op,-1l,1);//去掉逗號
      do
      {     
       tempw[i]=fgetc(op);//逆向輸入
       i++;
       fseek(op,-2l,1);//putchar(fgetc(op));fseek(op,-1l,1);      
      }while(fgetc(op)!='(');//判斷這個單詞結束的標志
       
      for(j=0;i>0;i--)
      {
       tempword[j]=tempw[i-1];//再次順序輸入到tempword
       j++;
       fseek(op,1l,1);
      }
      tempword[j]='\0';
      //puts(tempword);
      fseek(op,3l,1);//putchar(fgetc(op));fseek(op,-1l,1);
     }
     return tempx;

     //putchar(tempc);
           //putchar('\n');
    }
    fseek(op,-2l,1);

   }
 

 }
 return NULL;
 
}

 

void error(int wnum)
{
 if(wnum==4)printf("錯誤(%d):var,procedure后應為標志符\n",row);
 else if(wnum==5)printf("錯誤(%d):漏掉了','或';'\n",row);
 else if(wnum==6)printf("錯誤(%d):過程說明后的符號不正確(應是語句的開始符,或過程的定義符)\n",row);
 else if(wnum==7)printf("錯誤(%d):應是語句開始符\n",row);
 else if(wnum==8)printf("錯誤(%d):程序體內語句部分的后跟符不正確\n",row);
 else if(wnum==9)printf("錯誤(%d):程序結尾丟了句號'.'\n",row);
 else if(wnum==10)printf("錯誤(%d):語句之間丟了分號';'\n",row);
 else if(wnum==11)printf("錯誤(%d):標志符未說明\n",row);
 else if(wnum==12)printf("錯誤(%d):賦值語句中,賦值號左部標志符屬性應是變量\n",row);
 else if(wnum==13)printf("錯誤(%d):賦值號左部標志符后應是賦值號':='\n",row);
 else if(wnum==14)printf("錯誤(%d):call應為標志符\n",row);
 else if(wnum==15)printf("錯誤(%d):call后標志符屬性應為過程\n",row);
 else if(wnum==16)printf("錯誤(%d):條件語句中丟了'then'\n",row);
 else if(wnum==17)printf("錯誤(%d):丟了'end'或';'\n",row);
 else if(wnum==18)printf("'錯誤(%d):while'型循環(huán)語句中丟了'do'\n",row);
 else if(wnum==19)printf("錯誤(%d):語句后的符號不正確\n",row);
 else if(wnum==20)printf("錯誤(%d):應為關系運算符\n",row);
 else if(wnum==21)printf("錯誤(%d):表達式內標志符屬性不能是過程\n",row);
 else if(wnum==22)printf("錯誤(%d):表達式中漏掉右括號')'\n",row);
 else if(wnum==23)printf("錯誤(%d):因子后的非法符號\n",row);
 else if(wnum==24)printf("錯誤(%d):表達式的開始符號不能是此符號\n",row);
 else if(wnum==31)printf("錯誤(%d):數越界\n",row);
 else if(wnum==32)printf("錯誤(%d):read語句括號中的標志符不是變量\n",row);

 else if(wnum==1)printf("錯誤(%d):wwww\n",row);
 else if(wnum==2)printf("錯誤(%d):\n",row);
 else if(wnum==33)printf("錯誤(%d):應該為賦值號\n",row);
 else if(wnum==34)printf("錯誤(%d):讀語句缺少左括號\n",row);
 else if(wnum==35)printf("錯誤(%d):程序的開始符號出錯\n",row);
 else if(wnum==36)printf("錯誤(%d):read語句括號中缺少標志符\n",row);
 else if(wnum==37)printf("錯誤(%d):read語句漏掉左括號'('\n",row);
 else if(wnum==38)printf("錯誤(%d):write語句括號中缺少表達式\n",row);
 else if(wnum==39)printf("錯誤(%d):write語句漏掉左括號'('\n",row);
 else if(wnum==40)printf("錯誤(%d):關系運算符出錯\n",row);
 else if(wnum==41)printf("錯誤(%d):條件開始子集錯誤\n",row);
 else if(wnum==42)printf("錯誤(%d):標志符未定義\n",row);
 else if(wnum==43)printf("錯誤(%d):標志符已定義\n",row);
 else if(wnum==44)printf("錯誤(%d):標志符屬性不復合要求\n",row);
 else if(wnum==45)printf("錯誤(%d):分程序后應跟分號\n",row);
 else if(wnum==36)printf("錯誤(%d):程序意外結束,無法繼續(xù)編譯\n",row);


}
/*約定每一個產生式結束時都得取出下一個字符*/
void S()//程序
{
 //輸入符號為結束標志,輸出提示信息,退出程序
 if(token=='.') 
 {
  printf("analyse over!\n\n");
  exit(0);
 }

 //當輸入符號不屬于開始符號集時,轉到錯誤處理//下面句判斷條件有錯誤
 if(token!='p'&&token!='m'&&token!='e'&&token!='k'&&token!='q'&&token!='g'&&token!='n'&&token!='r'&&token!='f'&&token!='.'&&token!=';'&&token!='j') 
 {
  error(35);int stemprow=0;
  stemprow=row;
  token=word();/*程序的開始符號出錯,處理方式:判斷后跟符是否為S的開始符,直到取得一個可以是語句或變量說明部分或過程說明部分的開始符*/
  while(stemprow==row)
  {
   token=word();
  }
  //token=word();putchar(token);
  S();
 }
   else
 {  
  F();
  if(token=='.')
  {
   printf("analyse over!\n");
  }
  else
  {
   error(9);//putchar('m');//缺少程序的結束符
   //fputchar(token);
  }
 }
}
void F()//分程序
{
 int ftemprow=0;
 ftemprow=row;
     if(token=='m')
  {
   G();
   //token=word();
   if(token=='p')
   {
    B();//putchar('y');
    Y();
   }
   else
   {
    Y();
   }
  }
 else if(token=='p')
  {
   B();
   //token=word();
   if(token=='m')
   {
    G();
    Y();
   }
   else
   {//putchar('y');
    Y();
   }
  }
 else if(token=='e'||token=='k'||token=='q'||token=='g'||token=='n'||token=='r'||token=='f'||token!='.'||token!=';'||token!='j')

 {
  Y();
 }
 else
 {
  error(1);//putchar('y');
  while(ftemprow==row)
   token=word();
  F();
 }
}
void B()//變量說明部分
{
 int temprow=0;
 temprow=row;
 if(token!='p') //當輸入符號不等于p時,轉到錯誤處理
 {  //putchar(token);
  error(1);//變量說明部分的關鍵字應該是‘var’
  while(temprow==row)
   token=word();
 }
 else
 {
  token=word();
 
     if(token!='e')//判斷是否在同行
  {
      error(4);
     while(temprow==row)
       token=word();
  }
     else
  {
   if(find(tempword))
   {
    error(43);//標志符已定義
    //putchar('b');
   }
   else
   {
    filltable(tempword,'p');//putchar('t');
   }
       token=word();
  
         if(token!=';'&&token!=',')
   {
          error(5);//putchar('x');//變量結束符應該是分號//檢查該行是否結束是則缺少分號不是則缺少逗號
           while(temprow==row)//行未結束則繼續(xù)取詞
          token=word();
   }
        else
     {
             while(token==',')//當
    {
              token=word(); //putchar('x');
              if(token!='e')
     {
               error(4);//判斷該行是否結束是則報錯結束符應該是分號,不是報錯應該為標志符
         while(temprow==row)
      token=word();
     }
               else
      {  
       if(find(tempword))
       {
                  error(43);//標志符已定義
                   //putchar('b');
       }
                 else
        {
                    filltable(tempword,'p');//putchar('t');
        }
                 token=word();//繼續(xù)取數
      }
    }
          if(token!=';'&&temprow==row)//還要判斷是否同行
    {
          error(17);//結束符不正確
    }
          else
    {
               token=word();
    }
     }
  }
 }
}
void G()//過程說明部分
{
 //putchar('y');
 int gtemprow=0;
 gtemprow=row;
 if(token!='m')
 {
  //putchar('y');
  error(1);//putchar('y');//過程說明符應該為procedure
  while(gtemprow==row)
   token=word();
 }
 else
 {
  //putchar('y');
  //token=word();
  C(); //putchar('x');
  F(); //putchar('x');
  if(token!=';')
  {
   error(45);//putchar('x');//the end shoud be ';' 只報錯不作處理
  }
   token=word();//繼續(xù)取單詞
     if(token=='m')//是'm'就說明是另一個過程的開始
     {
      //token=word();
      G();
     }
 }
}
void Y()//語句
{
 int ytemprow=0;
if(token=='e'||token=='k'||token=='q'||token=='g'||token=='n'||token=='r'||token=='f'||token!='.'||token!=';'||token!='j')
{   
 if(token=='e')//賦值語句
 { 
  compare(tempword,'p');
  ytemprow=0;
  ytemprow=row;
        token=word();//putchar('x');
  if(token!='a')
  {
            error(33);//putchar('y');//應該為賦值號
   while(ytemprow==row)
    token=word();
   ytemprow=0;//putchar(token);
  }
  else
  {
   token=word();//putchar('w');putchar(token);//continue to get the next alpha
   A();//putchar('z');//Call A
   //putchar('x');putchar(token);//token=word();
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
这里只有精品99re| 日韩激情一区二区| 精品久久久久久久人人人人传媒 | 精品久久久久久综合日本欧美| 欧美精品久久久久久久多人混战| 色婷婷久久一区二区三区麻豆| 99久久婷婷国产| 99这里只有久久精品视频| 91老师片黄在线观看| www.视频一区| 色婷婷av一区二区三区软件 | 日本久久精品电影| 欧美午夜在线观看| 91精品国产aⅴ一区二区| 日韩欧美精品三级| 国产精品国产馆在线真实露脸 | 精品一二三四区| 国产一二精品视频| 国产69精品久久久久777| av网站免费线看精品| 欧美日韩久久久一区| 久久影院视频免费| 一区视频在线播放| 午夜精品一区二区三区电影天堂| 裸体歌舞表演一区二区| 懂色中文一区二区在线播放| 色视频欧美一区二区三区| 51精品久久久久久久蜜臀| 久久网站最新地址| 亚洲图片欧美综合| 激情图区综合网| 色婷婷一区二区三区四区| 日韩一区二区在线观看视频播放| 国产日韩欧美a| 亚洲一区在线免费观看| 国产精品99久久久久久久vr | av一区二区久久| 日韩亚洲欧美在线| 国产精品国产三级国产aⅴ中文 | 色综合久久综合| xvideos.蜜桃一区二区| 亚洲国产婷婷综合在线精品| 国产麻豆精品在线| 欧美久久久久久久久| 国产精品视频免费看| 日韩电影一区二区三区| 91天堂素人约啪| 久久久亚洲精华液精华液精华液| 一区二区三区资源| 高清不卡一二三区| 日韩美女一区二区三区| 一区二区三区在线免费视频| 高清成人在线观看| 亚洲精品在线观看视频| 免费观看一级欧美片| 欧美视频三区在线播放| 亚洲欧美在线高清| 国产精品99久久不卡二区| 欧美人xxxx| 亚洲综合小说图片| 一本色道综合亚洲| 中文字幕在线不卡一区二区三区| 国产美女在线精品| 久久久综合视频| 国产精品一区三区| 久久免费精品国产久精品久久久久| 视频一区视频二区中文| 欧美丝袜丝交足nylons图片| 1024国产精品| 99久久精品国产导航| 中文字幕一区二区三区色视频| 国产麻豆成人精品| 国产欧美一区二区三区鸳鸯浴| 久久99蜜桃精品| 久久久精品免费免费| 国产99久久精品| 中文欧美字幕免费| 成人精品gif动图一区| 国产精品乱码久久久久久| 国产成人综合网站| 国产精品乱码妇女bbbb| 99国产精品99久久久久久| 夜夜嗨av一区二区三区中文字幕| 色美美综合视频| 日韩高清在线一区| 欧美一三区三区四区免费在线看| 日本不卡一二三区黄网| 欧美精品一区二区在线播放| 国产精品一区二区三区99| 国产蜜臀97一区二区三区| 成人深夜视频在线观看| 国产精品乱码一区二三区小蝌蚪| 色婷婷精品大在线视频| 性做久久久久久免费观看欧美| 欧美一个色资源| 国产电影精品久久禁18| 亚洲精品网站在线观看| 欧美丰满一区二区免费视频| 国产一区在线观看视频| 国产精品色哟哟网站| 欧美亚洲图片小说| 日本伊人精品一区二区三区观看方式| 337p粉嫩大胆色噜噜噜噜亚洲| k8久久久一区二区三区| 亚洲chinese男男1069| 国产日韩欧美精品综合| 91福利在线观看| 国产一二精品视频| 亚洲成人av电影| 国产精品国产三级国产aⅴ中文 | 国产一区二区三区香蕉| 国产精品美女久久久久久久久 | 99久久综合国产精品| 亚洲午夜激情网页| 国产视频不卡一区| 7777精品伊人久久久大香线蕉最新版| 国产福利一区二区三区视频在线| 夜夜嗨av一区二区三区中文字幕| 久久蜜桃av一区二区天堂| 欧美艳星brazzers| 成人性生交大合| 免费成人在线观看视频| 亚洲欧美日韩在线不卡| 国产欧美日韩精品在线| 91精品国模一区二区三区| 色综合天天综合| 成人激情黄色小说| 亚洲午夜电影在线| 亚洲人成伊人成综合网小说| 2023国产一二三区日本精品2022| 在线视频综合导航| av欧美精品.com| 成人黄页在线观看| 黄色小说综合网站| 免费一区二区视频| 日本午夜精品一区二区三区电影| 亚洲免费伊人电影| 亚洲欧美综合网| 国产精品拍天天在线| 国产欧美日韩综合| 日本一区二区三级电影在线观看| 日韩网站在线看片你懂的| 在线视频一区二区三区| av电影在线观看一区| av在线综合网| 波多野结衣精品在线| 风间由美一区二区av101| 国产精品一卡二| 国产福利91精品一区| 成人午夜激情片| 不卡的av电影| 91亚洲精品一区二区乱码| 成人美女视频在线观看18| 国产98色在线|日韩| 成年人网站91| 色香蕉久久蜜桃| 91久久人澡人人添人人爽欧美| 色综合天天天天做夜夜夜夜做| 色综合中文字幕国产| 99国内精品久久| 欧美性xxxxx极品少妇| 制服丝袜中文字幕一区| 26uuu亚洲综合色欧美| 国产午夜精品一区二区三区嫩草 | 91麻豆福利精品推荐| 欧美综合在线视频| 欧美精品视频www在线观看| 91精品国产综合久久久久久久| 日韩欧美专区在线| 久久久激情视频| 一个色在线综合| 狠狠狠色丁香婷婷综合激情| 岛国av在线一区| 91蜜桃在线免费视频| 欧美一区二区在线看| 国产性做久久久久久| 亚洲欧美日本在线| 美女在线一区二区| 99精品视频一区| 777久久久精品| 中文字幕av资源一区| 亚洲va天堂va国产va久| 国产不卡免费视频| 欧美午夜理伦三级在线观看| 久久综合狠狠综合久久综合88| 中文字幕一区二区日韩精品绯色| 一区二区三区 在线观看视频| 日本美女一区二区| aa级大片欧美| 日韩欧美国产综合在线一区二区三区| 国产亚洲欧洲一区高清在线观看| 亚洲综合视频网| 国产成人精品网址| 日韩亚洲欧美高清| 最新中文字幕一区二区三区| 久久福利资源站| 欧美美女bb生活片| 亚洲欧洲精品一区二区三区不卡| 蜜臀av性久久久久蜜臀aⅴ四虎| 99久久精品国产观看|