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

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

?? parse.c

?? 自己做的一個C語言的解釋器 給大家做個參考
?? C
?? 第 1 頁 / 共 2 頁
字號:
/********************************************************
* Porject Name:
*	Little C Interpretes
* Version & Revision:
*	1.0.1
* Creation Date:
*	2005-02-02
* Author:
*	Herbet Schildt & Yock Yu
* Description:
*	Recursive descent parser for integer expressions
*	which may include variable and function calls.
********************************************************/
#include "setjmp.h"
#include "math.h"
#include "ctype.h"
#include "stdlib.h"
#include "string.h"
#include "stdio.h"

#define NUM_FUNC		100
#define NUM_GLOBAL_VARS	100
#define NUM_LOCAL_VARS	200
#define ID_LEN			31
#define FUNC_CALLS		31
#define PROG_SIZE		10000
#define FOR_NEST		31

enum tok_types{DELIMITER, IDENTIFIER, NUMBER, KEYWORD, TEMP, STRING, BLOCK};

enum tokens{ARG, CHAR, INT, IF, ELSE, FOR, DO, WHILE, 
				SWITCH, CASE, BREAK, CONTINUE, /*Rev 1.05 yock.yu 05-02-18*/
				SIZEOF,/*Rev1.06 yock.yu 05-03-01*/
				RETURN, EOL, FINISHED, END};

enum double_ops{LT = 1, LE, GT, GE, EQ, NE};

/*Rev 1.02 yock.yu 05-02-09*/
enum self_ops{AD = 0x11, DE, AQ, DQ, MQ, VQ, OQ, RQ};
                         /* ++,          --, +=, -=, *=, /=, %=, ^=*/

/*
	These are the constants used to all sntx_err()
	when a syntax error occurs. Add more if you like.
	NOTE:SYNTAX is generic error message used when
	noting else seems appropriate.
*/
enum error_msg{SYNTAX, UNBAL_PARENS, NO_EXP, EQUALS_EXPECTED, NOT_VAR, PARAM_ERR,
				SEMI_EXPECTED, UNBAL_BRACES, FUNC_UNDEF, TYPE_EXPECTED, NEST_FUNC,
				RET_NOCALL, PAREN_EXPECTED, WHILE_EXPECTED, QUOTE_EXPECTED,
				NO_TEMP, TOO_MANY_LVARS, DIV_BY_ZERO};

extern char *prog; /* current location in source code */
extern char *p_buf; /* points to start of program buffer */
extern jmp_buf e_buf; /* hold enviorment for longjmp() */

/*
	An array of these structures will hold
	the info associated with global variables.
*/
extern struct var_type{
	char var_name[32];
	int v_type;
	int value;
}global_vars[NUM_GLOBAL_VARS];

/*
	This is the function call stack
*/
extern struct func_type{
	char func_name[32];
	int ret_type;
	char *loc; /* location of function entry point in file */
}func_stack[NUM_FUNC];

/*
	Keyword table
*/
extern struct commands{
	char command[20];
	char tok;
}table[];

/*
	Sizeof variable
*/
/*Rev1.06 yock.yu 05-03-01 start*/
extern struct size_of_var{
	int v_type;
	int size;
}size_var[];
/*Rev1.06 yock.yu 05-03-01 end*/

/*
	"Standard library" functions are declared here so
	they can be put into the internal function table
	that follows.
*/
int call_getche(void), call_putch(void);
int call_puts(void), print(void), getnum(void);

struct intern_func_type{
	char *f_name; /* function name */
	int (*p)(); /* pointer to the function */
}intern_func[]={
	"getche", call_getche,
	"putch", call_putch,
	"puts", call_puts,
	"print", print,
	"getnum", getnum,
	"", 0 /* null terminate the list */
};

extern char token[80]; /* string representation of token */
extern char token_type; /* contains type of token */
extern char tok; /* internal representation of token */
extern int ret_value; /* function return value */

void eval_exp(int *value);
void eval_exp0(int *value), eval_exp1(int *value);
void eval_exp2(int *value), eval_exp3(int *value);
void eval_exp4(int *value), eval_exp5(int *value);
void atom(int *value);
void sntx_err(int error), putback(void);
void assign_var(char *var_name, int value);
int isdelim(char c), look_up(char *s), iswhite(char c);
int find_var(char *s), find_type(char *s), get_token(void);
int internal_func(char *s);
extern int is_var(char *s);
extern char *find_func(char *name);
extern void call(void);
int is_alpha(char c);

/* Entry point into parser */
void eval_exp(int *value)
{
	get_token();
	if(!*token){
		sntx_err(NO_EXP);
		return;
	}

	if(*token == ';'){
		*value = 0; /* empty expression */
		return;
	}

	eval_exp0(value);
	putback();/* return last token read to input stream */
}

/* Process an assignment expression */
void eval_exp0(int *value)
{
	char temp[ID_LEN]; /* holds name of var receiving the assignment*/

	register int temp_tok;

	if(token_type == IDENTIFIER){
		if(is_var(token)){ /* if a var, see if assignment */
			strcpy(temp, token);
			temp_tok = token_type;
			get_token();
			if(*token == '='){ /* is an assignment */
				get_token();
				eval_exp0(value); /* get value to assignment */
				assign_var(temp, *value); /* assign the value */
				return;
			}
			else{ /* not an assignment */
				putback(); /* restore original token */
				strcpy(token, temp);
				token_type = temp_tok;
			}
		}
	}

	eval_exp1(value);
}

/* Process relatonal operators. */
void eval_exp1(int *value)
{
	int partial_value;
	int t;/*Rev 1.03 yock.yu 05-02-12*/
	char temp[ID_LEN];/*Rev 1.03 yock.yu 05-02-12*/
	register char op;
	char relops[7]={LT, LE, GT, GE, EQ, NE, 0};

	char dualops[7]={AQ, DQ, MQ, VQ, OQ, RQ, 0};/* Rev 1.03 yock.yu 05-02-12*/
	strcpy(temp, token);

	eval_exp2(value);
	op = *token;

	/* Rev 1.03 yock.yu 05-02-12 start*/
	if(strchr(dualops, op)){
		get_token();
		eval_exp2(&partial_value);
		switch(op){
			case AQ:
				*value = *value + partial_value;
				break;
			case DQ:
				*value = *value - partial_value;
				break;
			case MQ:
				*value = *value * partial_value;
				break;
			case VQ:
				if(partial_value == 0)
					sntx_err(DIV_BY_ZERO);
				*value = *value / partial_value;
				break;
			case OQ:
				break;
			case RQ:
				t = (*value) / partial_value;
				*value = *value - (t * partial_value);
				break;
		}
		assign_var(temp, *value);
		return;
	}
	/* Rev 1.03 yock.yu 05-02-12 end*/

	if(strchr(relops, op)){
		get_token();
		eval_exp2(&partial_value);
		switch(op){ /* perform the relation operation */
			case LT:
				*value = *value < partial_value;
				break;
			case LE:
				*value = *value <= partial_value;
				break;
			case GT:
				*value = *value > partial_value;
				break;
			case GE:
				*value = *value >= partial_value;
				break;
			case EQ:
				*value = *value == partial_value;
				break;
			case NE:
				*value = *value != partial_value;
				break;
		}
	}
}

/* Add or subtract two terms. */
void eval_exp2(int *value)
{
	register char op;
	int partial_value;

	eval_exp3(value);
	while((op = *token) == '+' || op == '-'){
		get_token();
		eval_exp3(&partial_value);
		switch(op){ /* add or subtract */
			case '+':
				*value = *value + partial_value;
				break;
			case '-':
				*value = *value - partial_value;
				break;
		}
	}
}

/* Multiply or divide two factors. */
void eval_exp3(int *value)
{
	register char op;
	int partial_value, t;

	eval_exp4(value);
	while((op = *token) == '*' || op == '/' || op == '%'){
		get_token();
		eval_exp0(&partial_value);
		switch(op){ /* mul, div, or modulus */
			case '*':
				*value = *value * partial_value;
				break;
			case '/':
				if(partial_value == 0)
					sntx_err(DIV_BY_ZERO);
				*value = *value / partial_value;
				break;
			case '%':
				t = (*value) / partial_value;
				*value = *value - (t * partial_value);
				break;
		}
	}
}

/* Is a unary + or -. */
void eval_exp4(int *value)
{
	register char op;
	char tmp;/*Rev1.02 yock.yu 05-02-11*/

	op = '\0';
	if(*token == '+' || *token == '-'){
		op = *token;
		get_token();
	}

	/*Rev1.02 yock.yu 05-02-11 start*/
	if(*token == AD || *token == DE){
		tmp = *token;
		get_token();
		eval_exp5(value);
		if(tmp == AD) ++*value;
		else if(tmp == DE) --*value;
	}
	else
	/*Rev1.02 yock.yu 05-02-11 end*/
		eval_exp5(value);

	if(op)
		if(op == '-')
			*value = -(*value);
}

/* Process parenthesized expression. */
void eval_exp5(int *value)
{
	char temp[ID_LEN];/*Rev 1.02 yock.yu 05-02-11*/

	if(*token == '('){
		get_token();
		eval_exp0(value); /* get subexpressoin */
		if(*token != ')')
			sntx_err(PAREN_EXPECTED);
		get_token();
	}
	else{
		strcpy(temp, token);/*Rev 1.02 yock.yu 05-02-11*/
		atom(value);
		/*Rev 1.02 yock.yu 05-02-11 start*/
		if(*token == AD || *token == DE){
			if(*token == AD) ++(*value);
			else if(*token == DE) --(*value);
			assign_var(temp, *value);
			get_token();
		}
		/*Rev 1.02 yock.yu 05-02-11 end*/
	}
}

/* Find value of number, variable, or function. */
void atom(int *value)
{
	int i;

	switch(token_type){
		case IDENTIFIER:
			i = internal_func(token);
			if(i != -1){ /* call "standard library" function */
				*value = (*intern_func[i].p)();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美特级限制片免费在线观看| 欧美日韩dvd在线观看| 亚洲大片精品永久免费| 久久久久久久久久久99999| 日本精品裸体写真集在线观看| 精品无人区卡一卡二卡三乱码免费卡| 国产精品乱人伦中文| 欧美一区二区视频观看视频| 91丨porny丨国产| 国产在线日韩欧美| 亚洲黄色小说网站| 久久九九久久九九| 日韩精品一区二区三区四区视频 | 欧美午夜精品久久久久久超碰| 国产综合久久久久久鬼色| 亚洲综合av网| 亚洲色图都市小说| 国产亚洲短视频| 日韩精品一区二区三区在线| 欧美日韩久久一区二区| av电影在线观看一区| 国产主播一区二区三区| 奇米888四色在线精品| 亚洲一区二区三区爽爽爽爽爽 | 在线视频一区二区免费| 成人国产免费视频| 国产传媒日韩欧美成人| 国精品**一区二区三区在线蜜桃| 免费成人在线视频观看| 日本少妇一区二区| 日本 国产 欧美色综合| 日韩精品一级中文字幕精品视频免费观看 | 久久国产精品99精品国产| 亚洲成a人片综合在线| 一个色妞综合视频在线观看| 亚洲欧美日韩国产成人精品影院| 中文字幕一区二区三区视频| 中文字幕乱码亚洲精品一区| 国产日韩欧美激情| 亚洲国产岛国毛片在线| 国产精品国产精品国产专区不片| 国产女主播一区| 国产精品国产精品国产专区不蜜| 中文字幕中文字幕一区二区| 亚洲男同1069视频| 亚洲丝袜制服诱惑| 一区二区三区四区视频精品免费 | 亚洲美女屁股眼交3| 亚洲欧美日韩中文播放| 亚洲伊人伊色伊影伊综合网| 五月天一区二区| 麻豆精品一区二区综合av| 麻豆专区一区二区三区四区五区| 国产精品一二三区| av中文字幕一区| 欧美亚洲国产一区二区三区va| 欧美人牲a欧美精品| 欧美r级在线观看| 国产精品免费视频网站| 亚洲精品国产第一综合99久久| 亚洲一二三四在线| 人人超碰91尤物精品国产| 国产一区二区三区久久久 | 久久成人麻豆午夜电影| 国产精品一区二区免费不卡| bt欧美亚洲午夜电影天堂| 精品视频全国免费看| 精品美女在线观看| 亚洲欧洲另类国产综合| 亚洲妇女屁股眼交7| 久久99九九99精品| 成人a免费在线看| 欧美日韩二区三区| 久久亚洲精品国产精品紫薇 | 韩日欧美一区二区三区| 国产·精品毛片| 欧美韩国日本不卡| 国产精品三级av| 亚洲18影院在线观看| 韩国三级电影一区二区| 一本大道久久a久久精品综合| 7799精品视频| 国产精品理论片| 专区另类欧美日韩| 日韩伦理av电影| 日韩精品电影一区亚洲| 国产成人免费视| 欧美揉bbbbb揉bbbbb| 欧美激情一区三区| 青草av.久久免费一区| 91毛片在线观看| wwwwxxxxx欧美| 亚洲国产视频网站| 国产盗摄女厕一区二区三区| 5566中文字幕一区二区电影| 国产精品你懂的在线欣赏| 日韩av一区二区三区| 色综合久久久久综合体桃花网| 欧美电影免费提供在线观看| 亚洲乱码国产乱码精品精可以看| 久久99精品久久久久久动态图| 日本高清不卡aⅴ免费网站| 久久影院电视剧免费观看| 午夜在线电影亚洲一区| 99久久99久久久精品齐齐| 26uuu精品一区二区在线观看| 视频一区视频二区中文| 91蜜桃婷婷狠狠久久综合9色| 久久网站热最新地址| 日韩国产在线一| 欧美三区免费完整视频在线观看| 国产精品久久久久久久久快鸭 | 久久精品国产色蜜蜜麻豆| 91福利在线导航| 国产精品久久福利| 国产a区久久久| 国产亚洲欧美一区在线观看| 日韩电影一区二区三区| 欧美无人高清视频在线观看| 亚洲欧美一区二区在线观看| 韩国一区二区视频| 精品乱人伦小说| 日韩国产精品大片| 7777精品伊人久久久大香线蕉的| 亚洲一区二区三区中文字幕在线 | 色又黄又爽网站www久久| 亚洲欧美在线视频| 粉嫩嫩av羞羞动漫久久久| 精品国产乱码久久久久久图片| 日韩黄色在线观看| 欧美一区二区视频在线观看2022| 天天综合色天天| 欧美日韩国产精品成人| 亚洲高清免费视频| 欧美日韩精品免费观看视频| 五月天激情小说综合| 欧美色图激情小说| 日韩国产一二三区| 日韩欧美国产1| 国产一区不卡在线| 久久免费视频色| 成人激情校园春色| 亚洲欧洲日韩综合一区二区| 91美女在线看| 亚洲国产人成综合网站| 欧美精品成人一区二区三区四区| 青青草成人在线观看| 欧美videos大乳护士334| 国内外精品视频| 欧美国产97人人爽人人喊| 99久久精品国产毛片| 亚洲精品国产视频| 在线不卡a资源高清| 久久精品国产亚洲a| 欧美高清在线视频| 欧洲日韩一区二区三区| 日本亚洲电影天堂| 久久精品网站免费观看| av动漫一区二区| 午夜激情一区二区三区| 精品国产乱码久久久久久影片| 成人av一区二区三区| 亚洲综合区在线| 欧美成人综合网站| 不卡av免费在线观看| 亚洲va国产va欧美va观看| 精品人伦一区二区色婷婷| 成人av电影在线观看| 亚洲成av人片一区二区三区| 久久青草国产手机看片福利盒子| 97se亚洲国产综合自在线不卡| 亚洲第一福利一区| 欧美精品一区二区三区久久久| 成人av电影在线观看| 亚洲bt欧美bt精品| 国产人成亚洲第一网站在线播放| 在线欧美小视频| 国产一区二区三区在线观看免费视频| 国产精品久久久久久久久免费相片 | 夜夜嗨av一区二区三区中文字幕| 91精品视频网| 成人99免费视频| 久久精品国产99国产精品| 亚洲欧洲日产国产综合网| 91精品国产丝袜白色高跟鞋| eeuss鲁片一区二区三区| 日韩高清一级片| 亚洲日本在线看| 久久综合色之久久综合| 色偷偷久久一区二区三区| 九九九精品视频| 亚洲尤物视频在线| 中文一区在线播放| 日韩一级高清毛片| 91高清在线观看| av资源网一区| 国产成人亚洲综合a∨婷婷 | av一二三不卡影片| 看片网站欧美日韩| 亚洲午夜久久久|