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

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

?? parse.c

?? 一個C語言編譯器
?? C
?? 第 1 頁 / 共 2 頁
字號:
	#include <stdio.h>
	#include <ctype.h>
	#include <string.h>
	#include <malloc.h>
	//#define BUFFER_SIZE 512  預定義緩沖區大小
	#define KEY_MOUNT   32     // 預定義關鍵字個數
	#define ID_SIZE  200      //預定義關鍵字大小
	#define MAX_ID  2000
	//用來定義關鍵字的集合
	#define  ANTO 257
	#define  BREAK 258
	#define  CASE 259
	#define  CHAR 260
	#define  CONST 261
	#define  CONTINUE 262
	#define  DEFAULT 263
	#define  DO 264
	#define DOUBLE 265
	#define ELSE 266
	#define ENUM 267
	#define EXTERN 268
	#define FLOAT 269
	#define FOR 270
	#define GOTO 271
	#define IF 272
	#define INT 273
	#define LONG 274
	#define REGISTER 275
	#define RETURN 276
	#define SHORT 277
	#define SIGNED 278
	#define SIZEOF 279
	#define  STATIC 280
	#define  STRUCT 281
	#define  SWITCH 282
	#define TYPEDEF 283
	#define UNION 284
	#define UNSIGNED 285
	#define VOID 286
	#define VOLATILE 287
	#define WHILE 288
	//定義記號集合
	#define ID 289
	#define NUMBER 290
	#define STRING 291
	#define REAL 292
	#define RELOP 293
	#define LOGIC_OP 294
	#define PAIR_MATCH 295
	#define SINGLE_CHAR 296
	#define PREDEFINE 297
	#define PREINCLUDE 298
	#define DEPARTOR 299
	#define COMMA 300
	#define SELF_ADD 301
	#define SELF_SUB 302
	#define AND 303
	#define OR 304
	#define BIG_EQUAL 305
	#define SMA_EQUAL 306
	#define EQUIV 307
	#define REF 308
	#define REMAIN 309
	#define UNEQUAL 310
	#define DONE  311
	#define PARSE_ERROR  1000
//用一個鏈表存放符號表。
	struct symbol
	{
		char lexpre[ID_SIZE];
		int field;
		struct symbol *next;
	} ;   
	struct key
	{
		char *lexpre;
		int field;   
	}    
	symtable[KEY_MOUNT+1];    //用來存儲關鍵字列表
//用來存儲匹配符堆棧
	struct stack 
	{
		char pair_list[100];
		int top;	
	} pair;
	
	struct symbol *sym_list_head;
	struct symbol *sym_list_curr;
	
	int lineno=1; //行號
	char *lexeme; 
	FILE *res;  //源文件指針
	FILE *err;  //錯誤處理指針
	FILE *out_parse; //分析結果文件指針
	int token_type;  //記號類型
	int token_val;
	int flush=1;
	void init();           //初始化關鍵字列表
	int word_parse();
	void error(char *s);
	int insert(char *q,int token);
	int lookup(char *q);
	int is_full();
	void push(char c,struct stack *note);
	int pop(struct stack *note);
	int get_top(struct stack *note);
	int is_empty(struct stack *note);
	void test(struct stack *note);
	int main(int argc,char *argv[])
	{		
		int token;
		char name[64];
		init(); 
		printf("input the file to parse:");  
		scanf("%s",name);
		res=fopen(name,"r") ;
		freopen("error_test.txt","w+",stdout);
		printf("reopen in\n");
		if(res==NULL)
		{
			printf("error,can't open the file,please check the file path");
			exit(1);
		}  
		err=fopen("error.txt","w+");
		out_parse=fopen("word_parser_output.txt","w+ ");  
		token=word_parse();	
		while(token!=DONE)
			token=word_parse();
		putc(EOF,err);
		fclose(res);
		fclose(err);
        fprintf(out_parse,"line %d over\n",lineno);	
        fclose(out_parse);	 
		sym_list_curr=sym_list_head->next; 
		printf("TYPE               CONTEXT\n" );
		while(sym_list_curr!=NULL)
		{
			printf("%d:             %s\n",sym_list_curr->field,sym_list_curr->lexpre);
			sym_list_curr=sym_list_curr->next;
		}  
		test(&pair);
		getchar();
	}
	void init()
	{
		lexeme="auto\0break\0case\0char\0const\0continue\0default\0do\0double\0else\0enum\0extern\0float\0for\0goto\0if\0int\0long\0register\0return\0short\0signed\0sizeof\0static\0struct\0switch\0typedef\0union\0unsigned\0void\0volatile\0while\0"  ;

		symtable[1].field= ANTO;
		symtable[1].lexpre=lexeme;

		symtable[2].field= BREAK;
		symtable[2].lexpre=lexeme+5;

		symtable[3].field= CASE;
		symtable[3].lexpre=lexeme+11;

		symtable[4].field= CHAR;
		symtable[4].lexpre=lexeme+16;

		symtable[5].field= CONST;
		symtable[5].lexpre=lexeme+21;

		symtable[6].field= CONTINUE;
		symtable[6].lexpre=lexeme+27;

		symtable[7].field= DEFAULT;
		symtable[7].lexpre=lexeme+36;

		symtable[8].field= DO;
		symtable[8].lexpre=lexeme+44;

		symtable[9].field= DOUBLE;
		symtable[9].lexpre=lexeme+47;

		symtable[10].field= ELSE;
		symtable[10].lexpre=lexeme+54;

		symtable[11].field= ENUM;
		symtable[11].lexpre=lexeme+59;

		symtable[12].field= EXTERN;
		symtable[12].lexpre=lexeme+64;

		symtable[13].field= FLOAT;
		symtable[13].lexpre=lexeme+71;

		symtable[14].field= FOR;
		symtable[14].lexpre=lexeme+77;

		symtable[15].field= GOTO;
		symtable[15].lexpre=lexeme+81;

		symtable[16].field= IF;
		symtable[16].lexpre=lexeme+86;

		symtable[17].field= INT;
		symtable[17].lexpre=lexeme+89;

		symtable[18].field= LONG;
		symtable[18].lexpre=lexeme+93;

		symtable[19].field= REGISTER;
		symtable[19].lexpre=lexeme+98;

		symtable[20].field= RETURN;
		symtable[20].lexpre=lexeme+107;

		symtable[21].field= SHORT;
		symtable[21].lexpre=lexeme+114;

		symtable[22].field= SIGNED;
		symtable[22].lexpre=lexeme+120;

		symtable[23].field= SIZEOF;
		symtable[23].lexpre=lexeme+127;

		symtable[24].field= STATIC;
		symtable[24].lexpre=lexeme+134;

		symtable[25].field= STRUCT;
		symtable[25].lexpre=lexeme+141;

		symtable[26].field= SWITCH;
		symtable[26].lexpre=lexeme+148;

		symtable[27].field= TYPEDEF;
		symtable[27].lexpre=lexeme+155;

		symtable[28].field= UNION;
		symtable[28].lexpre=lexeme+163;

		symtable[29].field= UNSIGNED;
		symtable[29].lexpre=lexeme+169;

		symtable[30].field= VOID;
		symtable[30].lexpre=lexeme+178;

		symtable[31].field= VOLATILE;
		symtable[31].lexpre=lexeme+183;

		symtable[32].field= WHILE;
		symtable[32].lexpre=lexeme+192;
		token_val=0;
		sym_list_head=sym_list_curr=(struct symbol *)malloc(sizeof(struct symbol));
	}
	int word_parse()
	{

		int curr_ch;
		int next_ch;
		int last_ch;
		char records[ID_SIZE]={0};
		int i,j,k;      
        printf("line :%d word ----->\n",lineno);	  	
		while(1)
		{
		    
			curr_ch=getc(res);			
			if(lineno==57)
            printf("line :%d word ----->\n",lineno);
			if(curr_ch=='/')
			{            
				next_ch=getc(res);
				if(next_ch=='/')
				{
					while( curr_ch != EOF && curr_ch != '\n')
					{
						curr_ch=getc(res);
					}    

					if(curr_ch==EOF)
					{				
						return DONE;
					}			

					lineno++;
					continue;
				}

				else if(next_ch=='*')
				{					
					curr_ch=getc(res);
					next_ch=getc(res);				
							
					while( curr_ch != EOF && next_ch !=EOF)
					{
						if(curr_ch == '*' && next_ch == '/')
							break;
						else
						{
							if(curr_ch == '\n'  )
								lineno++;						
							curr_ch=next_ch;					   
							next_ch=getc(res);
						
						}
					}		     
					if(curr_ch == '*' && next_ch == '/')
					{						
						continue;
					}    
					if( curr_ch == EOF || next_ch ==EOF)
					{   					            
						return DONE;
					}    
				}          


				else
				{
					ungetc(next_ch,res); 
					fprintf(out_parse,"line %d:</RELOP>/<RELOP>\n",lineno);
					token_type='/';
					return token_type;
				}           
			}

			else if(curr_ch==' '|| curr_ch== '\t')           
				continue;    

			else if(curr_ch=='\n')
			{
              lineno++;
              continue;
          }    
			
			else if(curr_ch=='#')
			{				
				
				for(i=0;i<=6;i++)   
					records[i]= getc(res); 			
				
				*(records+7)='\0';
				if(!strcmp(records,"include"))
				{
					fprintf(out_parse,"line %d:</PREINCLUDE>#include<PREINCLUDE>\n",lineno);
					token_type=PREINCLUDE;
					return PREINCLUDE;
				}
				curr_ch=*(records+6);
				*(records+6)='\0';
				if(!strcmp(records,"define"))
				{
					fprintf(out_parse,"line %d:</PREDEFINE>#define<PREDEFINE>\n",lineno);
					token_type=PREDEFINE;
					return PREDEFINE;
				}
				ungetc(curr_ch,res);
				for(i=5;i>=0;i--)
					ungetc(*(records+i),res);
				error("illegar character in prefine");
				continue;
			}

			else if(isalpha(curr_ch)||curr_ch=='_')
			{
				i=j=0;
				k=0;
				while( isalnum(curr_ch) || curr_ch == '_')
				{
					*(records+(i++))=curr_ch;
					if(i > ID_SIZE)
					{
						error("identifier too long ,over the max size");
						break;
					}    
					curr_ch=getc(res);
				}
				*(records+i)='\0';
				ungetc(curr_ch,res);

				k=lookup(records);
				if(k>0)
				{
					fprintf(out_parse,"line %d:</KEYWORD>%s<KEYWORD>\n",lineno,records);
					return  k;
				}				

				insert(records,ID);				
				fprintf(out_parse,"line %d:</ID>%s<ID>\n",lineno,records);
				token_type=ID;
				return ID;

			}

			else if(curr_ch==EOF)
			{
				printf("line %d face EOF\n",lineno); 
				error("face EOF");
				return DONE;
			}

			else if(isdigit(curr_ch))
			{
				j=k=0;
				while(isdigit(curr_ch))
				{				
					*(records+(j++))=curr_ch;
					curr_ch=getc(res);
				}
				token_type=NUMBER;
				if(curr_ch=='.')
				{
					*(records+(j++))=curr_ch;
					curr_ch=getc(res);
					if(!isdigit(curr_ch))
					{
						printf("unexpected character in number %c\n",curr_ch);
						error("unexpected character in number");						
						*(records+(j++))='0';
					}
					else
					{
						while(isdigit(curr_ch))
						{
							*(records+(j++))=curr_ch;
							curr_ch=getc(res);
						}
						token_type=REAL;
					}
				}
				if(curr_ch=='e')
				{
					*(records+(j++))=curr_ch;
					curr_ch=getc(res);
					if(curr_ch=='+' || curr_ch== '-' )
					{
						*(records+(j++))=curr_ch;   
						curr_ch=getc(res);                    
					}    
					if(!isdigit(curr_ch))
						*(records+j)='0';
					while(isdigit(curr_ch))
					{
						*(records+(j++))=curr_ch;
						curr_ch=getc(res);
					}
					token_type=REAL;
					ungetc(curr_ch,res);
				}
				else				
					ungetc(curr_ch,res);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美少妇一区二区| 欧美一区二区高清| 色乱码一区二区三区88| 欧美色网一区二区| 日韩欧美激情一区| 亚洲视频免费在线观看| 亚洲国产高清不卡| 日韩激情视频网站| 97久久超碰精品国产| 粉嫩aⅴ一区二区三区四区五区| 蜜臀精品一区二区三区在线观看 | 亚洲va天堂va国产va久| 成人av在线影院| 国产日韩av一区| 狠狠色丁香久久婷婷综合丁香| 欧美又粗又大又爽| 亚洲视频在线一区观看| 丁香网亚洲国际| 久久久99精品久久| 国产资源在线一区| 精品对白一区国产伦| 九九九久久久精品| 精品成人免费观看| 久久99精品国产.久久久久久| 欧美视频一区二区三区四区 | 亚洲第一二三四区| 成人av在线电影| 欧美激情一区在线| 国产成人在线视频网址| 久久亚洲免费视频| 国产在线播放一区三区四| 精品国产乱码久久久久久免费| 麻豆极品一区二区三区| 欧美不卡在线视频| 国产精品资源在线| 欧美激情在线看| 91视频免费观看| 亚洲资源中文字幕| 欧美人成免费网站| 麻豆极品一区二区三区| 久久夜色精品国产欧美乱极品| 国产老女人精品毛片久久| 国产欧美一区视频| 91麻豆精品视频| 午夜视频在线观看一区二区三区| 91精品婷婷国产综合久久| 久久精品国内一区二区三区| 久久综合狠狠综合| 99re这里只有精品6| 亚洲一区二区三区在线| 日韩一级二级三级精品视频| 国产一区二区中文字幕| 亚洲男同性恋视频| 欧美一级夜夜爽| 国产91精品久久久久久久网曝门| 亚洲精品精品亚洲| 日韩一级完整毛片| 99热在这里有精品免费| 香蕉成人伊视频在线观看| 久久女同性恋中文字幕| 一本到不卡精品视频在线观看| 亚洲成人一二三| 国产欧美日韩久久| 在线一区二区三区做爰视频网站| 亚洲va国产天堂va久久en| 国产日韩在线不卡| 99久久免费精品高清特色大片| 一区二区三区精品视频| 26uuu亚洲综合色| 91高清视频免费看| 国产精品夜夜爽| 日本不卡一二三区黄网| 国产精品久久久久久久久久久免费看| 欧美图区在线视频| 成人三级伦理片| 精品一区二区三区不卡| 亚洲国产精品久久艾草纯爱| 久久精品亚洲乱码伦伦中文 | 欧美aaaaaa午夜精品| 色美美综合视频| 欧美一区永久视频免费观看| 丁香六月综合激情| 天天做天天摸天天爽国产一区| 国产日韩一级二级三级| 欧美久久久影院| 91蜜桃传媒精品久久久一区二区| 久久国产精品免费| 亚洲国产精品一区二区久久恐怖片| 久久精品视频一区| 欧美一级高清片| 欧美亚洲动漫制服丝袜| 不卡免费追剧大全电视剧网站| 免费观看在线色综合| 亚洲高清免费观看 | 欧美mv和日韩mv国产网站| 在线免费亚洲电影| 99视频有精品| 97久久精品人人爽人人爽蜜臀| 国产成人精品一区二区三区网站观看 | 亚洲第一久久影院| 国产日韩欧美在线一区| 5月丁香婷婷综合| 91麻豆国产精品久久| av一区二区三区黑人| 国产成人av影院| 国产一区二三区好的| 久久超碰97中文字幕| 日韩激情av在线| 日本欧美一区二区在线观看| 日韩精品乱码av一区二区| 亚洲伦理在线免费看| 亚洲精品成人少妇| 亚洲激情第一区| 亚洲第一主播视频| 日韩中文字幕不卡| 欧美aⅴ一区二区三区视频| 日本成人在线看| 蜜桃久久av一区| 精品一区二区三区久久久| 国内精品国产成人国产三级粉色| 狠狠色丁香婷婷综合| 国产精品乡下勾搭老头1| 粉嫩av亚洲一区二区图片| 国产原创一区二区三区| 欧美高清dvd| 91精品免费在线观看| 日本韩国欧美一区| 欧美性色综合网| 91精品国产欧美一区二区| 精品国产乱码久久久久久夜甘婷婷 | 亚洲图片欧美视频| 奇米精品一区二区三区四区| 久久精品国产一区二区三 | 中文字幕在线免费不卡| 亚洲人精品午夜| 亚洲h在线观看| 黄一区二区三区| www.欧美.com| 欧美日韩精品二区第二页| 日韩一区二区在线播放| 国产欧美日韩另类视频免费观看 | 日韩精品每日更新| 亚洲一二三区在线观看| 日韩av电影免费观看高清完整版在线观看| 日本不卡高清视频| 国产成人精品一区二区三区四区 | 亚洲国产精品一区二区www在线| 视频一区视频二区中文| 国产+成+人+亚洲欧洲自线| 色菇凉天天综合网| 久久久久久久久97黄色工厂| 国产精品福利一区| 奇米影视一区二区三区小说| 成人sese在线| 日韩欧美一级特黄在线播放| 国产精品久久久久久久久久久免费看 | 日韩经典一区二区| 不卡av在线免费观看| 4hu四虎永久在线影院成人| 国产女人18水真多18精品一级做| 性感美女极品91精品| 99久久精品免费看国产 | 韩国欧美一区二区| 欧美色图激情小说| 欧美激情综合网| 免费观看在线色综合| 在线观看区一区二| 国产精品网站在线播放| 久久草av在线| 欧美精选一区二区| 亚洲男人的天堂网| 国产91富婆露脸刺激对白| 日韩一区二区免费在线电影| 亚洲综合久久av| 色综合久久综合网97色综合| 国产三级一区二区| 韩国三级在线一区| 日韩一区二区精品在线观看| 亚洲综合色婷婷| 一本久道中文字幕精品亚洲嫩| 久久婷婷综合激情| 麻豆精品在线播放| 在线综合亚洲欧美在线视频| 亚洲一区二区四区蜜桃| 色婷婷一区二区| 自拍偷在线精品自拍偷无码专区| 国产99一区视频免费 | 高清视频一区二区| 久久久精品2019中文字幕之3| 久久电影国产免费久久电影| 91精品国产综合久久久久久久久久| 一二三四区精品视频| 91老师片黄在线观看| 亚洲欧洲99久久| 99久久精品免费看国产| 亚洲男同性恋视频| 在线免费亚洲电影| 午夜视频在线观看一区二区| 精品国产91久久久久久久妲己 | 日本aⅴ免费视频一区二区三区|