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

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

?? 詞法分析的c實現(做編譯器的時候很有用).txt

?? C_C++使用技巧全集
?? TXT
字號:
作者:skyhorsebj
email: XUEY@CIDC.COM.CN
日期:2001-7-3 12:41:52


    這里以開始定義的PASCAL語言子集的源程序作為詞法分析程序的輸入數據。
在詞法分析中,自文件頭開始掃描源程序字符,一旦發現符合"單詞"定義的源程
序字符串時,將它翻譯成固定長度的單詞內部表示,并查填適當的信息表。經過
詞法分析后,源程序字符串(源程序的外部表示)被翻譯成具有等長信息的單詞
串(源程序的內部表示),并產生兩個表格:常數表和標識符表,它們分別包含
了源程序中的所有常數和所有標識符。

下面就詞法分析程序中的主要變量進行說明:
    FILE fp     :文件指針,用于指向要分析的PASCAL源程序;
    char *key[8]:指針數組,用于指向關鍵字表;
        char *border[6]:指針數組,用于指向符號表;
    char *arithmetic[4]:指針數組,指向算術運算符表;
    char *relation[6]:指針數組,指向關系運算符表;
    char *consts[20]:指針數組,指向常數表;
    char *label[20]:指針數組,指向標識符表;
        int constnum,labelnum:整型變量,分別用于存放當前常數個數和標
識符個數。

程序中的主要子函數:
alphaprocess:關鍵字和標識符處理子函數;
digitprocess:數字處理函數;
otherprocess:其他字符處理函數;
search:查找子函數;

下面簡要分析一下詞法分析程序的運行流程:

主函數main():
     打開要分析的PASCAL源程序,若不能正確打開,則報錯。
   先從源程序中讀入一個字符ch,然后進行如下處理:
   1、ch是字符:轉入關鍵字和標識符處理子函數;
   2、ch是數字:轉入數字處理函數;
   3、ch是其他字符:轉入其他字符處理子函數;
    結束。

關鍵字和標識符處理子函數alphaprocess(char buffer);
        1、將buffer送入臨時數組alphatp[0],再讀入一個字符至buffer;
        2、判斷buffer是否為字符或數字,若是,則alphatp[1]=buffer;
        3、重復1,2,直到2判斷為假;在alphatp末尾添加'\0';
        4、調用search()子函數,在關鍵字表中匹配alphatp,若匹配成功,則返回序號;
    5、調用search,在標識符表中匹配alphatp,若匹配成功,則返回序號;
    6、在標識符表中添加alphatp,并返回序號;
        
其余子函數的處理方式于alphaprocess類似,此處不再贅述。

[程序調試]

現有PASCAL程序清單如下:
BEGIN 
  IF I=1 THEN
     I:=I+1  #
  ELSE   *&^
     IF I=2 THEN
        I:=I+11;
END.

運行詞法分析程序后,顯示如下結果:

BEGIN (1,1)
IF (1,4)
I (6,0)
= (4,2)
1 (5,0)
THEN (1,5)
I (6,0)
:= (2,2)
I (6,0)
+ (3,0)
1 (5,0)
# error,not a word
ELSE (1,2)
* (3,2)
& error,not a word
^ error,not a word
IF (1,4)
I (6,0)
= (4,2)
2 (5,1)
THEN (1,5)
I (6,0)
:= (2,2)
I (6,0)
+ (3,0)
11 (5,2)
; (2,1)
END (1,3)
. (2,3)
over

結果完全正確。

源程序: 
#include 
#include 
#include 
#include 
#include 
#define NULL 0

FILE *fp;
char cbuffer;
char *key[8]={"DO","BEGIN","ELSE","END","IF","THEN","VAR","WHILE"};
char *border[6]={",",";",":=",".","(",")"};
char *arithmetic[4]={"+","-","*","/"};
char *relation[6]={"<","<=","=",">",">=","<>"};
char *consts[20];
char *label[20];
int constnum=0,labelnum=0;

int search(char searchchar[],int wordtype)
     {
     int i=0;
     switch (wordtype) {
       case 1:for (i=0;i<=7;i++)
		  {
		   if (strcmp(key[i],searchchar)==0)
		     return(i+1);
		  };

       case 2:{for (i=0;i<=5;i++)
		  {
		   if (strcmp(border[i],searchchar)==0)
		      return(i+1);
		  };
	       return(0);
	      }

       case 3:{for (i=0;i<=3;i++)
		  {
		   if (strcmp(arithmetic[i],searchchar)==0)
		      {
		       return(i+1);
		      };
		  };
	      return(0);
	      };

       case 4:{for (i=0;i<=5;i++)
		  {
		   if (strcmp(relation[i],searchchar)==0)
		      {
		       return(i+1);
		      };
		  };
	       return(0);
	      };

       case 5:{for (i=0;i<=constnum;i++)
		  {
		   if (strcmp(consts[i],searchchar)==0)
		       {
			return(i+1);
		       };
		  }
	      consts[i-1]=(char *)malloc(sizeof(searchchar));
	      strcpy(consts[i-1],searchchar);
	      constnum++;
	      return(i);
	      };

       case 6:{for (i=0;i<=labelnum;i++)
		  {
		     if (strcmp(label[i],searchchar)==0)
		       {
			return(i+1);
		       };
		  }
	      label[i-1]=(char *)malloc(sizeof(searchchar));
	      strcpy(label[i-1],searchchar);
	      labelnum++;
	      return(i);
	      };

      }


     }


char alphaprocess(char buffer)
     {
      int atype;
      int i=-1;
      char alphatp[20];
      while ((isalpha(buffer))||(isdigit(buffer)))
	    {
	    alphatp[++i]=buffer;
	    buffer=fgetc(fp);
	    };
      alphatp[i+1]='\0';
      if (atype=search(alphatp,1))
	 printf("%s (1,%d)\n",alphatp,atype-1);
      else
	 {
	 atype=search(alphatp,6);
	 printf("%s (6,%d)\n",alphatp,atype-1);
	 };
      return(buffer);
      }

char digitprocess(char buffer)
     {
      int i=-1;
      char digittp[20];
      int dtype;
      while ((isdigit(buffer)))
	    {
	    digittp[++i]=buffer;
	    buffer=fgetc(fp);
	    }
      digittp[i+1]='\0';
      dtype=search(digittp,5);
      printf("%s (5,%d)\n",digittp,dtype-1);
      return(buffer);
     }

char otherprocess(char buffer)
     {

      int i=-1;
      char othertp[20];
      int otype,otypetp;
      othertp[0]=buffer;
      othertp[1]='\0';
      if (otype=search(othertp,3))
	 {
	 printf("%s (3,%d)\n",othertp,otype-1);
	 buffer=fgetc(fp);
	 goto out;
	 };

      if (otype=search(othertp,4))
	      {
	      buffer=fgetc(fp);
	      othertp[1]=buffer;
	      othertp[2]='\0';
	      if (otypetp=search(othertp,4))
		 {
		 printf("%s (4,%d)\n",othertp,otypetp-1);
		 goto out;
		 }
	      else
		 othertp[1]='\0';
		 printf("%s (4,%d)\n",othertp,otype-1);
		 goto out;
	      };

      if (buffer==':')
	      {
	      buffer=fgetc(fp);
	      if (buffer=='=')
		 printf(":= (2,2)\n");
		 buffer=fgetc(fp);
		 goto out;
	      }
	   else
	      {
	      if (otype=search(othertp,2))
		 {
		 printf("%s (2,%d)\n",othertp,otype-1);
		 buffer=fgetc(fp);
		 goto out;
		 }
	      };

	  if ((buffer!='\n')&&(buffer!=' '))
		  printf("%c error,not a word\n",buffer);
	  buffer=fgetc(fp);
out:      return(buffer);
     }



void main()
     {
     int i;
      for (i=0;i<=20;i++)
	  {
	   label[i]=NULL;
	   consts[i]=NULL;
	  };
      if ((fp=fopen("\\DEMO.PAS","r"))==NULL)
	 printf("error");
      else
	{
	cbuffer = fgetc(fp);
	while (cbuffer!=EOF)
	 {
	  if (isalpha(cbuffer))
	     cbuffer=alphaprocess(cbuffer);
	  else if (isdigit(cbuffer))
	     cbuffer=digitprocess(cbuffer);
	  else cbuffer=otherprocess(cbuffer);
	  };
	 printf("over\n");
	 };
      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合在线观看| 欧美日韩国产在线播放网站| 亚洲综合久久av| 国产亚洲一本大道中文在线| 欧美日韩一本到| gogo大胆日本视频一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品久久久久影院老司| 日韩精品在线看片z| 欧美系列一区二区| av中文字幕在线不卡| 国内成+人亚洲+欧美+综合在线| 亚洲午夜国产一区99re久久| 国产精品每日更新| 精品国产乱码久久久久久闺蜜| 欧美视频精品在线观看| 色综合久久99| 波多野结衣视频一区| 国产在线播放一区| 日本va欧美va瓶| 午夜天堂影视香蕉久久| 亚洲女女做受ⅹxx高潮| 国产精品久久精品日日| 久久综合色8888| 日韩欧美专区在线| 538在线一区二区精品国产| 色婷婷av一区二区三区软件| 不卡视频一二三四| 成人自拍视频在线观看| 国产大片一区二区| 国产一区二区三区四区五区美女| 免费观看一级特黄欧美大片| 亚洲成人免费视频| 亚洲电影一区二区| 亚洲一区在线观看视频| 一区二区三区精品视频| 亚洲另类春色校园小说| 亚洲美女一区二区三区| 一区二区免费视频| 亚洲成a人片在线不卡一二三区| 一区二区三区欧美亚洲| 亚洲一卡二卡三卡四卡| 亚洲国产综合视频在线观看| 一区二区三区日韩| 午夜久久久影院| 男男gaygay亚洲| 麻豆免费看一区二区三区| 精品在线一区二区三区| 久久精品国产澳门| 91色porny蝌蚪| 91美女精品福利| 欧美三级电影精品| 欧美一区二区成人| 久久新电视剧免费观看| 中文字幕欧美日本乱码一线二线| 中文一区二区完整视频在线观看| 国产精品乱码一区二区三区软件| 中文字幕中文乱码欧美一区二区| 亚洲欧洲另类国产综合| 亚洲黄色小视频| 日韩av一区二区三区| 国产综合久久久久久久久久久久| 成人综合在线观看| 欧洲国内综合视频| 日韩视频永久免费| 国产欧美一区二区三区在线老狼| 椎名由奈av一区二区三区| 亚洲伊人色欲综合网| 看电影不卡的网站| 99re视频精品| 欧美一级免费大片| 国产女主播视频一区二区| 亚洲精品中文在线观看| 日韩精品电影在线| 成人性色生活片| 欧美探花视频资源| 久久亚洲精华国产精华液 | 亚洲国产成人av| 六月丁香婷婷色狠狠久久| 岛国精品一区二区| 在线播放国产精品二区一二区四区| 欧美电影免费观看完整版| 国产精品久久久久久久久免费相片| 一区二区三区**美女毛片| 美女一区二区久久| 91免费视频大全| 欧美大片在线观看| 亚洲女女做受ⅹxx高潮| 国产一区在线看| 欧美体内she精视频| 国产性色一区二区| 天堂成人免费av电影一区| 成人国产精品免费网站| 欧美精品高清视频| 中文字幕一区二区视频| 日韩精品色哟哟| eeuss鲁片一区二区三区在线观看| 欧美一区二区网站| 亚洲男女一区二区三区| 国产在线精品一区在线观看麻豆| 欧美午夜精品一区| 国产精品视频线看| 激情五月婷婷综合网| 欧美日韩大陆在线| 亚洲免费观看视频| 成人深夜在线观看| 欧美精品一区二区三区高清aⅴ| 亚洲国产精品精华液网站| 成人av电影免费观看| 26uuu国产一区二区三区| 舔着乳尖日韩一区| 91福利小视频| 综合网在线视频| 国产乱淫av一区二区三区| 欧美精品高清视频| 亚洲成人三级小说| 在线观看网站黄不卡| 国产精品高清亚洲| 国产成人精品一区二区三区网站观看| 欧美一卡在线观看| 日韩不卡免费视频| 欧美日韩免费视频| 亚洲成人激情社区| 91精品91久久久中77777| 中文字幕一区在线观看| 粉嫩aⅴ一区二区三区四区| 久久免费视频一区| 国产一区二区在线电影| 欧美成va人片在线观看| 丁香婷婷深情五月亚洲| 久久免费偷拍视频| 国产麻豆精品theporn| 26uuuu精品一区二区| 精品在线免费视频| 精品国产91洋老外米糕| 久草中文综合在线| 欧美va亚洲va| 国产精品羞羞答答xxdd| 久久精品在线观看| 成人精品在线视频观看| 国产精品国产三级国产aⅴ中文 | 精品一区二区三区免费播放| 69堂精品视频| 青青草精品视频| 日韩精品一区二区三区蜜臀| 韩日欧美一区二区三区| 国产人久久人人人人爽| 成人性生交大片免费看在线播放| 国产精品热久久久久夜色精品三区 | 亚洲国产欧美在线人成| 欧美唯美清纯偷拍| 日韩精品免费专区| 精品免费日韩av| 国产91在线看| 亚洲欧美日韩小说| 91麻豆精品国产无毒不卡在线观看| 日韩福利电影在线观看| 亚洲精品一区二区在线观看| 国产成人在线影院| 亚洲情趣在线观看| 91精品国产福利| 国产精品伊人色| 亚洲精品中文字幕乱码三区| 欧美日韩在线电影| 精品在线亚洲视频| 亚洲色图第一区| 在线播放中文字幕一区| 国产综合久久久久久鬼色| 国产精品不卡一区| 欧美一区二区三区免费大片| 国产福利视频一区二区三区| 中文字幕一区二区三区四区| 欧美日韩国产精品成人| 韩国欧美国产1区| 亚洲欧美日韩国产成人精品影院 | 成人激情黄色小说| 亚洲成人先锋电影| 欧美国产在线观看| 欧美性生交片4| 国产成人欧美日韩在线电影| 亚洲一区中文日韩| 国产清纯美女被跳蛋高潮一区二区久久w| 91在线观看污| 看片的网站亚洲| 一区二区三区在线视频观看| 欧美成人官网二区| 欧美午夜精品一区二区三区| 国产精品亚洲成人| 丝袜诱惑制服诱惑色一区在线观看| 欧美国产日韩a欧美在线观看| 欧美视频一区二区三区| 成人精品视频一区| 美女视频网站久久| 亚洲一区二区三区在线播放| 国产网红主播福利一区二区| 欧美日韩精品一区视频| 不卡av在线免费观看| 国产真实乱子伦精品视频| 亚洲福利视频一区二区| 国产精品福利一区二区三区|