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

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

?? 詞法分析.c

?? 一個C的詞法分析程序
?? C
字號:
/*******************************************
 詞法分析程序
 作者:龔勛
 學號:200131500342
 計科系 13班
********************************************/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

/*******************************************
 初始化函數
********************************************/
void init()
{             
    char *key[]={" ","auto","break","case","char","const","continue","default","do","double",
                 "else","enum","extern","float","for","goto","if","int","long","register",
                 "return","short","signed","sizeof","static","struct","switch","typedef",
                 "union","unsigned","void","volatile","while"};     /*C語言所有關鍵字,共32個*/
    char *limit[]={" ","(",")","[","]","->",".","!","++","--","&","~",
                   "*","/","%","+","-","<<",">>","<","<=",">",">=","==","!=","&&","||",
                  "=","+=","-=","*=","/=",",",";","{","}","#","_","'"};/*運算、限界符*/
    FILE *fp;
    int i;
    char c;
    fp=fopen("k.txt","w");
    for(i=1;i<=32;i++)
       fprintf(fp,"%s\n",key[i]);
    fclose(fp);               /*初始化關鍵字表*/
    fp=fopen("l.txt","w");
    for(i=1;i<=38;i++)
       fprintf(fp,"%s\n",limit[i]);
    c='"';
    fprintf(fp,"%c\n",c);
    fclose(fp);               /*初始化運算、限界符表*/
    fp=fopen("i.txt","w");
    fclose(fp);               /*初始化標識符表*/
    fp=fopen("c.txt","w");
    fclose(fp);               /*初始化常數表*/
    fp=fopen("output.txt","w");
    fclose(fp);               /*初始化輸出文件*/
}

/*******************************************
 十進制轉二進制函數
********************************************/
char * dtb(char *buf)
{          
    int temp[20];
	char *binary;
	int value=0,i=0,j;
	for(i=0;buf[i]!='\0';i++)
		value=value*10+(buf[i]-48);       /*先將字符轉化為十進制數*/
    if(value==0)
    {
		binary=malloc(2*sizeof(char));
		binary[0]='0';
		binary[1]='\0';
		return(binary);
	}
	i=0;
	while(value!=0)
    {
		temp[i++]=value%2;
		value/=2;
	}
	temp[i]='\0';
	binary=malloc((i+1)*sizeof(char));
	for(j=0;j<=i-1;j++)
       binary[j]=(char)(temp[i-j-1]+48);
    binary[i]='\0';
    return(binary);
}

/*******************************************
 根據不同命令查表或造表函數
********************************************/
int find(char *buf,int type,int command)
{             
    int number=0;
    FILE *fp;
    char c;
    char temp[30];
    int i=0;
    switch(type)
    {
        case 1: fp=fopen("k.txt","r");break;
        case 2: fp=fopen("i.txt","r");break;
        case 3: fp=fopen("c.txt","r");break;
        case 4: fp=fopen("l.txt","r");
    }
    c=fgetc(fp);
    while(c!=EOF)
    {
        while(c!='\n')
        {
            temp[i++]=c;
            c=fgetc(fp);
        }
        temp[i]='\0';
        i=0;
        number++;
        if(strcmp(temp,buf)==0)
        {  
		    fclose(fp);
			return(number);        /*若找到,返回在相應表中的序號*/
        }
        else
           c=fgetc(fp);
     }
     if(command==1)
     {   
	     fclose(fp); 
		 return(0);                /*找不到,當只需查表,返回0,否則還需造表*/
     }
     switch(type)
     {
         case 1: fp=fopen("k.txt","a");break;
         case 2: fp=fopen("i.txt","a");break;
         case 3: fp=fopen("c.txt","a");break;
         case 4: fp=fopen("l.txt","a");
     }
     fprintf(fp,"%s\n",buf);
     fclose(fp);
     return(number+1);             /*造表時,將字符串添加到表尾并返回序號值*/
}

/*******************************************
 數字串處理函數
********************************************/
void cs_manage(char *buffer)
{             
    FILE *fp;
	char *pointer;
	int result;
	pointer=dtb(buffer);
    result=find(pointer,3,2);       /*先查常數表,若找不到則造入常數表并返回序號值*/
    fp=fopen("output.txt","a");
	fprintf(fp,"%s\t\t\t3\t\t\t%d\n",buffer,result);
	fclose(fp);               /*寫入輸出文件*/
}

/*******************************************
 字符串處理函數 
********************************************/
void ch_manage(char *buffer)
{                     
    FILE *fp;
    int result;
    result=find(buffer,1,1);           /*先查關鍵字表*/
    fp=fopen("output.txt","a");
    if(result!=0)
       fprintf(fp,"%s\t\t\t1\t\t\t%d\n",buffer,result);    /*若找到,寫入輸出文件*/
    else
    {
        result=find(buffer,2,2);       /*若找不到,則非關鍵字,查標識符表,還找不到則造入標識符表*/
        fprintf(fp,"%s\t\t\t2\t\t\t%d\n",buffer,result);
    }                                 /*寫入輸出文件*/
    fclose(fp);
}

/*******************************************
 出錯處理函數
********************************************/
void er_manage(char error,int lineno)
{                 
    printf("\nerror: %c ,line %d",error,lineno);    /*報告出錯符號和所在行數*/
}

/*******************************************
 掃描程序
********************************************/
void scanner()
{            
    FILE *fpin,*fpout;
    char filename[20];
    char ch;
    int i=0,line=1;
    int count,result,errorno=0;
	char array[30];
    char *word;
	printf("\nthe file name:");
    scanf("%s",filename);
    if((fpin=fopen(filename,"r"))==NULL)
    {
        printf("cannot open file");
        return;
    }
    ch=fgetc(fpin);
    while(ch!=EOF)
    {                 /*按字符依次掃描源程序,直至結束*/
        i=0;
        if(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_'))
        {           /*以字母開頭*/
            while(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_')||((ch>='0')&&(ch<='9')))
            {
                array[i++]=ch;
                ch=fgetc(fpin);
            }
            word=(char *)malloc((i+1)*sizeof(char));
			memcpy(word,array,i);
			word[i]='\0';
            ch_manage(word);
            if(ch!=EOF)
			   fseek(fpin,-1L,SEEK_CUR);
        }
        else if(ch>='0'&&ch<='9')
        {          /*以數字開頭*/
            while(ch>='0'&&ch<='9')
            {
                array[i++]=ch;
                ch=fgetc(fpin);
            }
            word=(char *)malloc((i+1)*sizeof(char));
			memcpy(word,array,i);
			word[i]='\0';
            cs_manage(word);
            if(ch!=EOF)
			   fseek(fpin,-1L,SEEK_CUR);
        }
        else if((ch==' ')||(ch=='\t'))
			;           /*消除空格符和水平制表符*/
		else if(ch=='\n')
			line++;           /*消除回車并記錄行數*/
		else if(ch=='/')
        {                 /*消除注釋*/
			ch=fgetc(fpin);
			if(ch=='=')
			{              /*判斷是否為‘/=’符號*/
				fpout=fopen("output.txt","a");
				fprintf(fpout,"/=\t\t\t4\t\t\t32\n");
                fclose(fpout);
			}
			else if(ch!='*')
            {              /*若為除號,寫入輸出文件*/
                fpout=fopen("output.txt","a");
				fprintf(fpout,"/\t\t\t4\t\t\t13\n");
                fclose(fpout);
				fseek(fpin,-1L,SEEK_CUR);
			}
			else if(ch=='*')
			{              /*若為注釋的開始,消除包含在里面的所有字符*/
				count=0;
				ch=fgetc(fpin);
				while(count!=2)
                {          /*當掃描到‘*’且緊接著下一個字符為‘/’才是注釋的結束*/
					count=0;
					while(ch!='*')
						ch=fgetc(fpin);
					count++;
					ch=fgetc(fpin);
					if(ch=='/')
						count++;
					else
						ch=fgetc(fpin);
				}
			}
		}
		else if(ch=='"')
		{                 /*消除包含在雙引號中的字符串常量*/
			fpout=fopen("output.txt","a");
			fprintf(fpout,"%c\t\t\t4\t\t\t37\n",ch);
			ch=fgetc(fpin);
			while(ch!='"')
				ch=fgetc(fpin);
            fprintf(fpout,"%c\t\t\t4\t\t\t37\n",ch);
			fclose(fpout);
		}
		else
        {         /*首字符為其它字符,即運算限界符或非法字符*/
            array[0]=ch;
            ch=fgetc(fpin);       /*再讀入下一個字符,判斷是否為雙字符運算、限界符*/
            if(ch!=EOF)
            {           /*若該字符非文件結束符*/
                array[1]=ch;
				word=(char *)malloc(3*sizeof(char));
				memcpy(word,array,2);
				word[2]='\0';
                result=find(word,4,1);      /*先檢索是否為雙字符運算、限界符*/
				if(result==0)
				{                           /*若不是*/
                    word=(char *)malloc(2*sizeof(char));
					memcpy(word,array,1);
					word[1]='\0';
					result=find(word,4,1);      /*檢索是否為單字符運算、限界符*/
					if(result==0)
                    {                           /*若還不是,則為非法字符*/
						er_manage(array[0],line);
						errorno++;
						fseek(fpin,-1L,SEEK_CUR);
                    }
                    else
					{     /*若為單字符運算、限界符,寫入輸出文件并將掃描文件指針回退一個字符*/
						fpout=fopen("output.txt","a");
						fprintf(fpout,"%s\t\t\t4\t\t\t%d\t\n",word,result);
						fclose(fpout);
						fseek(fpin,-1L,SEEK_CUR);
					}
				}
                else
				{             /*若為雙字符運算、限界符,寫輸出文件*/
					fpout=fopen("output.txt","a");
					fprintf(fpout,"%s\t\t\t4\t\t\t%d\n",word,result);
					fclose(fpout);
				}
            }
            else
			{               /*若讀入的下一個字符為文件結束符*/
				word=(char *)malloc(2*sizeof(char));
				memcpy(word,array,1);
				word[1]='\0';
				result=find(word,4,1);       /*只考慮是否為單字符運算、限界符*/
				if(result==0)                /*若不是,轉出錯處理*/
					er_manage(array[0],line);
				else
				{                            /*若是,寫輸出文件*/
					fpout=fopen("output.txt","a");
					fprintf(fpout,"%s\t\t\t4\t\t\t%d\n",word,result);
					fclose(fpout);
				}
			}
        }
        ch=fgetc(fpin); 
    }
    fclose(fpin);
	printf("\nThere are %d error(s).\n",errorno);         /*報告錯誤字符個數*/
}

/*******************************************
 主函數
********************************************/
main()
{           
    init();            /*初始化*/
    scanner();         /*掃描源程序*/
}  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女网站视频久久| 高清免费成人av| 亚洲香蕉伊在人在线观| 午夜av电影一区| 国产福利精品一区| 色婷婷狠狠综合| 精品美女一区二区三区| 亚洲欧洲一区二区在线播放| 亚洲一区二区av电影| 亚洲成人动漫av| 国产高清不卡二三区| 91成人在线免费观看| 亚洲精品在线一区二区| 亚洲黄色小说网站| 国产精品中文有码| 欧美高清视频www夜色资源网| 日韩丝袜美女视频| 亚洲永久免费视频| 成人性色生活片免费看爆迷你毛片| 欧美一区二区三区日韩视频| 综合在线观看色| 国产一区二区精品在线观看| 91.com在线观看| 国产亚洲福利社区一区| 日韩精品视频网| 欧美性感一类影片在线播放| 国产女人aaa级久久久级 | 欧美区视频在线观看| 国产欧美一区二区三区网站| 久久国产精品一区二区| 欧美情侣在线播放| 亚洲第一精品在线| 在线观看亚洲专区| 亚洲图片你懂的| 不卡的av网站| 欧美激情自拍偷拍| 日韩电影一二三区| 欧美日韩dvd在线观看| 亚洲综合在线第一页| www.日本不卡| 国产精品久久久久久福利一牛影视| 国产在线视频不卡二| 欧美一区二区三区四区在线观看| 亚洲精品乱码久久久久久| 色哟哟国产精品免费观看| 久久亚洲综合色一区二区三区| 日韩av电影免费观看高清完整版 | 免费av成人在线| 日韩精品一区二区三区四区视频| 理论片日本一区| 国产精品三级电影| 欧美亚男人的天堂| 久久99精品久久久久久久久久久久| 久久久久久久久久美女| 国产成人亚洲精品狼色在线| 亚洲欧美日韩小说| 日韩欧美一级精品久久| 成人av在线观| 亚洲电影激情视频网站| 欧美精品一区男女天堂| 91麻豆精品一区二区三区| 亚洲成人激情自拍| 中文一区二区在线观看| 欧美日韩精品系列| 国产91露脸合集magnet| 亚洲成人三级小说| 国产精品久久久久影院| 欧美一区二区三区视频在线| 99国产精品国产精品毛片| 日韩精品久久久久久| 综合av第一页| 久久伊人蜜桃av一区二区| 欧美无人高清视频在线观看| 国产aⅴ综合色| 麻豆精品久久久| 亚洲精品免费视频| 国产亚洲欧美日韩在线一区| 欧美日韩一区二区三区四区五区 | 在线观看精品一区| 国产成人99久久亚洲综合精品| 亚洲美女淫视频| 久久久久久免费毛片精品| 欧美日韩免费电影| 色婷婷综合中文久久一本| 国产精品12区| 久久激情五月激情| 首页亚洲欧美制服丝腿| 亚洲激情综合网| 中文字幕中文字幕一区| 久久久精品国产99久久精品芒果| 欧美蜜桃一区二区三区| 色八戒一区二区三区| 成人毛片老司机大片| 国产精品一区二区三区四区| 六月丁香婷婷久久| 日本不卡一二三| 亚洲成人你懂的| 午夜私人影院久久久久| 亚洲国产一区二区在线播放| 亚洲欧美中日韩| 国产精品久久久久久久裸模| 日韩欧美久久久| 日韩欧美国产系列| 91精品国产91热久久久做人人| 欧美亚洲动漫精品| 欧美日韩情趣电影| 在线亚洲高清视频| 欧美三级日韩三级| 欧美日韩免费不卡视频一区二区三区| 色噜噜夜夜夜综合网| 色先锋aa成人| 欧美丝袜丝交足nylons图片| 色拍拍在线精品视频8848| 色综合久久中文字幕综合网 | 国产大陆精品国产| 国产精品一区二区果冻传媒| 国产精品乡下勾搭老头1| 国产成人亚洲综合色影视| 成人激情图片网| 91丨九色丨蝌蚪富婆spa| 91麻豆国产香蕉久久精品| 一本久道久久综合中文字幕| 色综合久久88色综合天天免费| 91免费版在线| 欧洲av一区二区嗯嗯嗯啊| 欧美色成人综合| 欧美一级艳片视频免费观看| 日韩欧美资源站| 精品久久国产字幕高潮| 久久精品亚洲精品国产欧美| 中文字幕精品一区二区精品绿巨人 | 国产乱码精品一区二区三区av| 国产福利一区二区| 色噜噜狠狠色综合欧洲selulu| 欧洲国内综合视频| 日韩欧美国产一区二区在线播放 | 91精品国产欧美一区二区成人| 91精品国产一区二区三区| 欧美成人性战久久| 欧美国产禁国产网站cc| 一二三四区精品视频| 日韩电影在线一区| 国产成人午夜电影网| 色香蕉成人二区免费| 欧美成人欧美edvon| 国产精品久久久久婷婷| 丝瓜av网站精品一区二区| 国产在线精品一区二区不卡了 | 91麻豆精品国产91久久久久 | 亚洲特黄一级片| 肉肉av福利一精品导航| 高清beeg欧美| 欧美另类高清zo欧美| 国产三级久久久| 视频在线在亚洲| 99精品黄色片免费大全| 欧美成人官网二区| 亚洲精品欧美激情| 国产麻豆成人精品| 欧美人体做爰大胆视频| 国产精品国产精品国产专区不片| 免费一级片91| 欧美影院一区二区| 国产精品乱子久久久久| 日本v片在线高清不卡在线观看| 99视频精品在线| 国产网红主播福利一区二区| 午夜视频在线观看一区二区| 91网站黄www| 国产精品你懂的在线欣赏| 久久精品国产77777蜜臀| 欧洲视频一区二区| 亚洲欧洲精品一区二区三区| 国产一区欧美二区| 日韩精品中文字幕一区二区三区 | 亚洲精品免费视频| 成人在线一区二区三区| 欧美一区二区成人| 亚洲超丰满肉感bbw| 91久久久免费一区二区| 国产精品免费视频一区| 国产麻豆欧美日韩一区| 日韩欧美三级在线| 日韩不卡在线观看日韩不卡视频| 91成人在线免费观看| 亚洲欧美福利一区二区| av在线播放一区二区三区| 国产欧美一区二区在线观看| 国产乱理伦片在线观看夜一区| 欧美大度的电影原声| 美女精品自拍一二三四| 91精品国产免费久久综合| 婷婷丁香久久五月婷婷| 欧美军同video69gay| 亚洲妇女屁股眼交7| 欧美午夜视频网站| 亚洲国产日韩综合久久精品| 欧美日韩在线一区二区| 日日夜夜精品视频天天综合网| 在线不卡的av|