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

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

?? bylr.c

?? 本次實驗
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <malloc.h>
#include "stack.h"

struct  symbolRecord
{
	char symbol[10];
	int id;
}record[15];
//讀入屬性
struct entryType
{
	char idName[16];
	int address;
	char *type;
	int value;
	struct entryType* next;
};
//數表
struct digitTable
{
	int address;
	int digit;
	struct digitTable *next;
};
//token字
struct tokenType
{
	int id;
	int entry;
	struct tokenType* next;
};
//語法分析產生語法分析樹
struct creat
{
	int id;
	int length;
	char left;
	char string[32];
}grammar[20];
//非終結符
struct term
{
	int id;
	char character;
}nonTerminate[10];
//四元式
struct equal
{
	int id;
	char first[16];
	char second[16];
	char third[16];
	char forth[16];
}equalExp[32];

int entry=0, digit=0, instruction=0;
int line=0, row=0, cursor=-1;
char stringBuffer[128];
char* file=NULL;
char strToken[20];
int fileLength=0;

int i,j;

struct entryType *headEntry,*tailEntry;
struct digitTable *headDigit,*tailDigit;
struct tokenType  *headToken, *tailToken;

char *keywords[]={"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"};     //32個關鍵字

int gotoTable[30][7]={0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  5,0,6,0,7,0,0,
					  0,0,0,10,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,11,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,13,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
				      0,0,0,0,0,0,19,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,26,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,27,
					  0,0,0,0,0,0,28,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0};//goto表
int actionTable[30][14]={1001,0,0,0,0,0,0,0,0,0,0,0,0,0,
						 0,0,0,0,0,0,0,0,0,0,0,1002,0,0,
						 0,0,0,0,0,0,0,0,0,0,0,0,1003,0,
						 0,0,0,0,1004,0,0,0,0,0,0,0,0,0,
						 0,1008,0,0,0,0,0,0,0,0,0,0,0,0,
						 0,0,0,4,0,1009,0,0,0,0,0,0,0,0,
						 0,0,0,3,0,3,0,0,0,0,0,0,0,0,
						 0,0,0,1012,0,0,0,0,0,0,0,0,0,0,
						 0,0,0,6,0,0,0,0,0,0,0,0,0,0,
						 0,0,0,0,0,0,0,0,0,0,0,0,0,-1,
						 0,0,0,1014,0,0,0,0,0,0,0,0,0,0,
						 0,0,0,0,0,0,1015,1016,0,0,0,0,0,0,
						 0,0,0,0,0,0,8,8,0,0,0,0,0,0,
						 0,0,0,2,0,2,0,0,0,0,0,0,0,0,
						 0,0,0,0,0,0,0,0,1017,0,0,0,0,0,
						 0,0,0,5,0,5,0,0,0,0,0,0,0,0,
						 0,0,0,1018,0,0,0,0,0,0,0,0,0,0,
						 0,0,1022,1021,0,0,0,0,0,0,0,1020,0,0,
						 0,0,0,0,0,0,7,7,0,0,0,0,0,0,
						 0,0,0,0,0,0,1023,0,0,1024,1025,0,0,0,
						 0,0,1022,1021,0,0,0,0,0,0,0,1020,0,0,
						 0,0,0,0,0,0,13,0,0,13,13,0,13,0,
						 0,0,0,0,0,0,14,0,0,14,14,0,14,0,
						 0,0,0,9,0,9,0,0,0,0,0,0,0,0,
						 0,0,1022,1021,0,0,0,0,0,0,0,1020,0,0,
						 0,0,1022,1021,0,0,0,0,0,0,0,1020,0,0,
						 0,0,0,0,0,0,0,0,0,1024,1025,0,1029,0,
						 0,0,0,0,0,0,10,0,0,10,1025,0,10,0,
						 0,0,0,0,0,0,11,0,0,11,11,0,11,0,
						 0,0,0,0,0,0,12,0,0,12,12,0,12,0};//action表
struct tokenType* position;

struct  place_E
{
	char strName[16];
	int value;
}place_E[32];
int nextQuad=0;//下一四元組
int nextList_P, nextList_S,nextList_D;
int	quad_M;
char relop[16];
char type_T[16];
int list_L[32];							//變量地址
char tempVariable[32][16];
int num_E=0, num_L=0;
int tempNum=0;

void panner(int i,Stack tokenStack);
void readGrammar();
char getCharacter();

void recogId(char);
void recogDigit(char);
void recogOther(char);

void  f1();
void  f2();
void  f3();
void  f4();
void  f5();
void  f6();
void  f7(Stack tokenStack);
void  f8(Stack tokenStack);
void  f9(Stack tokenStack);
void f10();
void f11();
void f12();
void f13(Stack tokenStack);
void f14(Stack tokenStack);


//初始化符號表
void initRecord()
{
	int i;
	char ch;
	int j=0, k=0;
	FILE *inFile;

	for(i = 0; i < 15; i++)
		record[i].id = i;

	if((inFile=fopen("symbol.txt","r"))==NULL)
	{
		printf("Cannot open file.");
		getchar();
		exit(0);
	}
	while((ch = getc(inFile)) != EOF ) {
		while((ch != '\n') && (ch != EOF)) {
			if((ch != ' ') && (ch != '\t'))
				record[j].symbol[k++] = ch;
			ch = getc(inFile);
		}
		record[j++].symbol[k] = '\0';
		k = 0;
	}
	fclose(inFile);
}

//插入數字
void insertDigit(int Digit)
{
	struct digitTable* tempDigitTable;
	tempDigitTable = (struct digitTable*) malloc(sizeof(struct digitTable));
	tempDigitTable->address = digit;
	tempDigitTable->digit = Digit;
	tempDigitTable->next = NULL;

	if(headDigit == NULL) {
		headDigit = tailDigit = tempDigitTable;
		digit++;
	} else {
		tailDigit = tailDigit->next = tempDigitTable;
		digit++;
	}
}
//插入token字
void insertToken(int id,int entry)
{
	struct tokenType *tempToken;
	tempToken= (struct tokenType*) malloc(sizeof(struct tokenType));
	tempToken->id = id;
	tempToken->entry = entry;
	tempToken->next = NULL;
	if(headToken == NULL) headToken = tailToken = tempToken;
	else tailToken = tailToken->next = tempToken;
}

//詞法分析
void Scan()
{
	struct stat buffer;
	int i = 0;
	char ch;
	char filename[40];
	FILE *inFile;

	printf("Please input the file name:");
	gets(filename);
	stat("filename", &buffer);
	file = (char*)malloc(sizeof(buffer.st_size));

	if((inFile=fopen("source.txt","r"))==NULL)
	{
		printf("Cannot open file.");
		getchar();
		exit(0);
	}
	while((ch = getc(inFile)) != EOF)
		file[i++] = ch;
	fclose(inFile) ;

	file[i++] = '\0';
	fileLength = i;
	initRecord();
	printf("\n--------------詞法分析----------------\n");
	while((ch = getCharacter()) != '\0') {
		if((ch != '\n') && (ch != ' ') && (ch != '\t')) {
			if( islower(ch) || isupper(ch) || ch == '_' )
				recogId(ch);
			else if(isdigit(ch))
				recogDigit(ch);
			else
				recogOther(ch);
		};
	}
	insertToken(13,-1);
}

int Reserve()
{
	int i,b=0; 
	for(i=0;i<32;i++)
    { 
		if(strcmp(strToken,keywords[i])==0)
			b=i;
    }
	return b;
}

void recogId(char ch)
{
	int i = 0;
	int code;
	int keyword = 0;
	strcpy(strToken,"");
	while(islower(ch) || isupper(ch) || isdigit(ch)) {
		strToken[i] = ch;
		ch = getCharacter();
		i++;
	}
	strToken[i] = '\0';
	cursor--;
	row--;
	
	code = Reserve();
	if (code)
		printf("%s\t關鍵字\n",strToken);
	else
		printf("%s\t標識符\n",strToken);
	
	for(i = 0; i < 13; i++) {
		if(strcmp(record[i].symbol,strToken) == 0) {
			insertToken(record[i].id, -1);
			keyword = 1;
		}
	}
	if(!keyword) {
		struct entryType *head, * tempEntry;
		int word = 0;
		if(headEntry == NULL) {
			head = (struct entryType*)malloc(sizeof(struct entryType));
			strcpy(head->idName, strToken);
			head->address = entry;
			head->type = NULL;
			head->next = NULL;
			headEntry = tailEntry = head;
			entry++;
			insertToken(3, entry - 1);
		}
		else {
			tempEntry = headEntry;
			while(tempEntry != NULL) {
				if(strcmp(tempEntry->idName, strToken) == 0) {
					insertToken(3, tempEntry->address);
					word = 1;
				}
				tempEntry = tempEntry->next;
			}
			if(!word) {
				head = (struct entryType*)malloc(sizeof(struct entryType));
				strcpy(head->idName, strToken);
				head->address = entry;
				head->type = NULL;
				head->next = NULL;
				tailEntry = tailEntry->next = head;
				entry++;
				insertToken(3, entry - 1);
			}
		}
	}
}

//識別數字
void recogDigit(char ch)
{
	int i = 0;
	do {
		i = i * 10 + ch - '0';
		ch = getCharacter();
	}while(isdigit(ch));
	row--;
	cursor--;
	printf("%d\t常  數\n",i);
	insertDigit(i);
	insertToken(2, digit - 1);
}

//識別界限符、運算符
void recogOther(char ch)
{
	switch(ch) {
	case '{': insertToken(4, -1); printf("%c\t界限符\n",ch); break;
	case '}': insertToken(5, -1); printf("%c\t界限符\n",ch); break;
	case ';': insertToken(6, -1); printf("%c\t界限符\n",ch); break;
	case ',': insertToken(7, -1); printf("%c\t界限符\n",ch); break;
	case '=': insertToken(8, -1); printf("%c\t運算符\n",ch); break;
	case '+': insertToken(9, -1); printf("%c\t運算符\n",ch); break;
	case '*': insertToken(10, -1); printf("%c\t運算符\n",ch); break;
	case '(': insertToken(11, -1); printf("%c\t界限符\n",ch); break;
	case ')': insertToken(12, -1); printf("%c\t界限符\n",ch); break;
	default:break;}
}

//查找下一個字符
char getCharacter()
{
	if(file[cursor] == '\n') {
		row = 1;
		line++;
		cursor++;
	} else {
		row++;
		cursor++;
	}
	return file[cursor];
}
//讀入語法分析結果
void readGrammar()
{
	int i = 1;
	FILE *in;

	if((in=fopen("grammar.txt","r"))==NULL){
		printf("Cannot open file.");
		getchar();
		exit(0);
	}
	else{
		while(fgets(grammar[i].string, 20, in)!=NULL){
			grammar[i].id = i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉最新版| 欧美日韩色综合| 精品在线免费视频| 日韩精品国产欧美| 精一区二区三区| 久久99精品国产麻豆婷婷洗澡| 精品一区二区三区久久| 国产美女一区二区| av电影在线观看一区| 91日韩精品一区| 欧美日韩一级片在线观看| 91麻豆精品国产91久久久久久| 国产精品国产三级国产普通话蜜臀| 亚洲午夜久久久久中文字幕久| 国内成+人亚洲+欧美+综合在线| 日韩视频免费直播| 91精品国产综合久久婷婷香蕉| 亚洲丝袜精品丝袜在线| 99re66热这里只有精品3直播| 高清不卡一二三区| 3d成人h动漫网站入口| 一区二区三区高清| 色综合夜色一区| 中文字幕乱码日本亚洲一区二区| 日本不卡不码高清免费观看| 欧美又粗又大又爽| 亚洲精品视频免费观看| 波多野结衣的一区二区三区| 久久久一区二区| 国产一区二区调教| 亚洲精品一区二区三区四区高清| 午夜精品一区在线观看| 欧美电影影音先锋| 视频一区二区三区中文字幕| 欧美区一区二区三区| 亚洲bt欧美bt精品777| 欧美天堂亚洲电影院在线播放 | 日韩电影免费在线观看网站| 欧美三级电影网| 一区二区三区国产豹纹内裤在线| 在线国产亚洲欧美| 日韩一区欧美二区| 日韩精品一区在线| 国产麻豆午夜三级精品| 国产精品理论在线观看| 99r精品视频| 一区二区不卡在线播放| 欧美精品乱人伦久久久久久| 免费成人在线观看| 久久久久久麻豆| 99久久精品国产麻豆演员表| 亚洲一区免费观看| 91精品国产入口| 国产美女在线观看一区| 国产精品国产a级| 欧美自拍偷拍午夜视频| 蜜乳av一区二区三区| 国产亚洲欧美一级| 91美女在线看| 人人狠狠综合久久亚洲| 国产精品视频免费看| 欧美三级视频在线观看| 九色porny丨国产精品| 国产精品美女久久久久高潮| 色拍拍在线精品视频8848| 老汉av免费一区二区三区| 中文字幕第一区| 欧美性猛交xxxx乱大交退制版 | 久久国产精品99精品国产| 亚洲国产精品黑人久久久| 91高清在线观看| 狠狠狠色丁香婷婷综合激情| 亚洲免费色视频| 精品国产乱码久久久久久老虎| www.亚洲色图.com| 日本一区中文字幕| 一级中文字幕一区二区| 国产亚洲成年网址在线观看| 欧美日产国产精品| 99久久综合精品| 精品在线亚洲视频| 亚洲一区二区欧美日韩 | 国产高清在线精品| 亚洲一区二区三区在线看| 久久久91精品国产一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 国产乱妇无码大片在线观看| 亚洲成人1区2区| 国产精品免费看片| 精品国产伦一区二区三区免费| 色综合天天狠狠| 国产成a人亚洲| 久久97超碰色| 天堂成人免费av电影一区| 综合久久综合久久| 久久精品人人做人人爽97| 日韩欧美一区二区不卡| 欧美日韩精品电影| 色一区在线观看| jizzjizzjizz欧美| 国产精品亚洲午夜一区二区三区| 日本亚洲三级在线| 亚洲成人手机在线| 一区二区三区免费网站| 亚洲天堂免费在线观看视频| 国产网站一区二区三区| 欧美精品一区二区三区高清aⅴ| 欧美日韩成人在线| 欧美日韩一区成人| 欧美猛男男办公室激情| 欧美日韩三级视频| 欧美日韩一区 二区 三区 久久精品| 91免费观看在线| 91在线视频观看| 成人av在线播放网站| 成人午夜在线免费| 成人午夜av在线| 国产黄色精品网站| 成人国产精品免费观看视频| 国产成人激情av| 99在线精品视频| 91蜜桃视频在线| 在线精品视频一区二区| 欧美日韩你懂的| 欧美成人三级电影在线| 精品福利一区二区三区 | 2023国产精品| 久久精品一区二区三区av| 国产免费观看久久| 亚洲欧美日韩国产成人精品影院| 亚洲欧美另类在线| 亚洲最新在线观看| 三级一区在线视频先锋| 蜜臀av性久久久久蜜臀aⅴ| 极品少妇xxxx精品少妇| 国产成人夜色高潮福利影视| 99精品视频在线免费观看| 欧美丝袜丝交足nylons图片| 欧美一区二区视频免费观看| wwwwww.欧美系列| 亚洲视频在线一区二区| 天天影视涩香欲综合网| 黑人精品欧美一区二区蜜桃| 福利电影一区二区| 欧美影视一区在线| 精品国产免费久久| 亚洲人成亚洲人成在线观看图片| 亚洲h在线观看| 国产91精品一区二区| 欧美三级视频在线观看| 国产日韩欧美麻豆| 婷婷六月综合亚洲| 成人在线视频一区| 777xxx欧美| 亚洲丝袜自拍清纯另类| 精品在线免费观看| 91福利社在线观看| 久久久www成人免费毛片麻豆 | 国产精品无人区| 亚洲大尺度视频在线观看| 国产乱妇无码大片在线观看| 欧美亚洲日本一区| 国产日韩影视精品| 水野朝阳av一区二区三区| 高清成人在线观看| 欧美一区二区三区成人| 中文字幕一区二区三区精华液 | 国产69精品久久久久777| 欧美精品高清视频| 国产精品国产馆在线真实露脸| 日韩国产欧美在线视频| 99久久精品免费看国产| 精品欧美久久久| 爽好多水快深点欧美视频| 91在线你懂得| 欧美激情一区二区三区不卡| 日本午夜一区二区| 欧美色图激情小说| 成人免费一区二区三区在线观看| 国产综合色在线| 91精品国产综合久久久蜜臀粉嫩 | 国产精品久久久久久妇女6080 | 激情综合网激情| 欧美日本不卡视频| 曰韩精品一区二区| 97久久超碰国产精品| 欧美国产禁国产网站cc| 国产精品99久| 精品国精品自拍自在线| 免费日本视频一区| 欧美日韩专区在线| 亚洲国产美国国产综合一区二区| 成人sese在线| 久久久精品免费免费| 国产麻豆精品久久一二三| 精品国产免费一区二区三区四区| 久久国产视频网| 日韩精品在线网站| 国产乱子伦一区二区三区国色天香| 欧美一区二区三区视频免费播放 |