⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdbms_sql.cpp

📁 使用yacc的一个例子
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include <yacc.h>

#define YYPARSEFAST
#line 1 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

#include "stdafx.h"
#include "sdbms.h"
#include "Sdbms_GlobalDefines.h"
#include "Sdbms_DataStruct.h"
#include "SqlMsg.h"
#include "sdbms_sql.h"

extern char * g_strSQL;
extern CSdbms g_sdbms;
extern CSqlMessage g_msg;

char g_strRangeItems[1000];
char g_strUserNames[1000];
char g_strRoleNames[1000];
char g_strSystemRights[1000];
char g_strObjectRights[1000];
char g_strTableNames[1000];
char g_strFieldNames[1000];
char g_strTableFieldNames[1000];
char g_strKeyColNames[1000];

struct Operations
{
	ObjectRight	nSqlID;
	CString		strFieldNames;
};

Operations g_opers[10];	//记录操作
int	g_nOpersCount = 0;	//操作个数

CSdbms_Cols g_cols[100];		//最大100列
int	 g_nColsCount = 0;	//实际列数
	
CSdbms_Values g_values[100];	//最大100列
int	g_nValuesCount = 0;	//实际列数

CSdbms_Express* g_expr[100];	//最大100
int	g_nExprCount = 0;	//实际列数

CSdbms_OrderList g_order[100];	//最大100
int g_nOrderCount = 0;	//实际列数

ObjectRight g_obright[10];	//10个应该足够了
int g_nObRightCount = 0;

struct KeyWordTable
{
	char *strKeyWord;
	int  nValue;
};

KeyWordTable g_KeyWordTable[] = 
{
	{"AND",			OPAND},
	{"OR",			OPOR},
	{"NOT",			OPNOT},
	{"CONNECT",		CONNECT},
	{"CREATE",		CREATE},
	{"DROP",		DROP},
	{"ADD",			ADD},
	{"DEL",			DEL},
	{"CHANGE",		CHANGE},
	{"ROLE",		ROLE},
	{"GRANT",		GRANT},
	{"REVOKE",		REVOKE},
	{"SET",			SET},
	{"AUDIT",		AUDIT},
	{"NOAUDIT",		NOAUDIT},
	{"OBJRIGHT",	OBJRIGHT},
	{"SYSRIGHT",	SYSRIGHT},
	{"SELECT",		SELECT},
	{"INSERT",		INSERT},
	{"UPDATE",		UPDATE},
	{"DELETE",		YDELETE},
	{"NULL",		YNULL},
	{"INTO",		INTO},
	{"VALUES",		VALUES},
	{"WHERE",		WHERE},
	{"ORDER",		ORDER},
	{"ASC",			ASC},
	{"DESC",		DESC},
	{"BELIEVED",	BELIEVED},
	{"SELF",		SELF},
	{"DATABASE",	DATABASE},
	{"TABLE",		TABLE},
	{"VIEW",		VIEW},
	{"INDEX",		INDEX},
	{"CHAR",		CHAR},
	{"INT",			INT},
	{"BOOL",		BOOL},
	{"PRIMARY",		PRIMARY},
	{"KEY",			KEY},
	{"WITH",		WITH},
	{"AS",			AS},
	{"OF",			OF},
	{"TO",			TO},
	{"ON",			ON},
	{"BY",			BY},
	{"FROM",		FROM},
	{"FOR",			FOR},
	{"USER",		USER},
	{"ROLE",		ROLE},
	{"CHILD",		CHILD},
	{"PARENT",		PARENT},
	{"TOP",			TOP},
	{"PASSWORD",	PASSWORD},
	{"EXECUTED",	EXECUTED},
	{"OPTION",		OPTION},
	{"CASCADE",		CASCADE},
	{"RESTRICT",	RESTRICT},
	{"SECLEVEL",	SECLEVEL},
	{"SECURITY",	SECURITY},
	{"LEVEL",		LEVEL},
	{"ALLOW",		ALLOW},
	{"CURRENT",		CURRENT},
	{"TRUE",		TRUE},
	{"FALSE",		FALSE}
};


#line 127 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
/* repeated because of possible precompiled header */
#include <yacc.h>

#define YYPARSEFAST
#include "sdbms_sql.h"

#ifndef YYSTYPE
#define YYSTYPE int
#endif
#ifndef YYSTACK_SIZE
#define YYSTACK_SIZE 100
#endif

/* (state) stack */
#if (YYSTACK_SIZE) != 0
static yystack_t YYNEAR yystack[(YYSTACK_SIZE)];
yystack_t YYFAR *YYNEAR YYDCDECL yysstackptr = yystack;
yystack_t YYFAR *YYNEAR YYDCDECL yystackptr = yystack;
#else
yystack_t YYFAR *YYNEAR YYDCDECL yysstackptr = NULL;
yystack_t YYFAR *YYNEAR YYDCDECL yystackptr = NULL;
#endif

/* attribute stack */
#if (YYSTACK_SIZE) != 0
static YYSTYPE YYNEAR yyattributestack[(YYSTACK_SIZE)];
#ifdef YYPROTOTYPE
void YYFAR *YYNEAR YYDCDECL yysattributestackptr = yyattributestack;
void YYFAR *YYNEAR YYDCDECL yyattributestackptr = yyattributestack;
#else
char YYFAR *YYNEAR YYDCDECL yysattributestackptr = (char YYFAR *) yyattributestack;
char YYFAR *YYNEAR YYDCDECL yyattributestackptr = (char YYFAR *) yyattributestack;
#endif
#else
#ifdef YYPROTOTYPE
void YYFAR *YYNEAR YYDCDECL yysattributestackptr = NULL;
void YYFAR *YYNEAR YYDCDECL yyattributestackptr = NULL;
#else
char YYFAR *YYNEAR YYDCDECL yysattributestackptr = NULL;
char YYFAR *YYNEAR YYDCDECL yyattributestackptr = NULL;
#endif
#endif

int YYNEAR YYDCDECL yysstack_size = (YYSTACK_SIZE);
int YYNEAR YYDCDECL yystack_size = (YYSTACK_SIZE);

/* attributes */
YYSTYPE YYNEAR yyval;
YYSTYPE YYNEAR yylval;
#ifdef YYPROTOTYPE
void YYFAR *YYNEAR YYDCDECL yyvalptr = &yyval;
void YYFAR *YYNEAR YYDCDECL yylvalptr = &yylval;
#else
char YYFAR *YYNEAR YYDCDECL yyvalptr = (char *) &yyval;
char YYFAR *YYNEAR YYDCDECL yylvalptr = (char *) &yylval;
#endif

size_t YYNEAR YYDCDECL yyattribute_size = sizeof(YYSTYPE);

/* yyattribute */
#ifdef YYDEBUG
#ifdef YYPROTOTYPE
static YYSTYPE YYFAR *yyattribute1(int index)
#else
static YYSTYPE YYFAR *yyattribute1(index)
int index;
#endif
{
	YYSTYPE YYFAR *p = &((YYSTYPE YYFAR *) yyattributestackptr)[yytop + index];
	return p;
}
#define yyattribute(index) (*yyattribute1(index))
#else
#define yyattribute(index) (((YYSTYPE YYFAR *) yyattributestackptr)[yytop + (index)])
#endif

#ifdef YYDEBUG
#ifdef YYPROTOTYPE
static void yyinitdebug(YYSTYPE YYFAR **p, int count)
#else
static void yyinitdebug(p, count)
YYSTYPE YYFAR **p;
int count;
#endif
{
	int i;
	yyassert(p != NULL);
	yyassert(count >= 1);

	for (i = 0; i < count; i++) {
		p[i] = &((YYSTYPE YYFAR *) yyattributestackptr)[yytop + i - (count - 1)];
	}
}
#endif

#ifdef YYPROTOTYPE
void YYCDECL yyparseaction(int action)
#else
void YYCDECL yyparseaction(action)
int action;
#endif
{
	switch (action) {
	case 0:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[6];
			yyinitdebug(yya, 6);
#endif
			{
#line 235 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoConnectDB(yyattribute(2 - 5).sval, yyattribute(5 - 5).sval);
					delete yyattribute(2 - 5).sval;
					delete yyattribute(5 - 5).sval;
				
#line 244 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 1:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[8];
			yyinitdebug(yya, 8);
#endif
			{
#line 241 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoConnectDB(yyattribute(2 - 7).sval, yyattribute(7 - 7).sval, yyattribute(4 - 7).sval);
					delete yyattribute(2 - 7).sval;
					delete yyattribute(4 - 7).sval;
					delete yyattribute(7 - 7).sval;
				
#line 262 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 2:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 252 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateDatabase(yyattribute(3 - 3).sval);
					delete yyattribute(3 - 3).sval;
				
#line 278 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 3:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 261 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoDropDatabase(yyattribute(3 - 3).sval);
					delete yyattribute(3 - 3).sval;
				
#line 294 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 4:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 267 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"
	yyval.sval = yyattribute(1 - 1).sval;	
#line 307 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 5:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[7];
			yyinitdebug(yya, 7);
#endif
			{
#line 272 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateUser(yyattribute(3 - 6).sval, yyattribute(6 - 6).sval);
					delete yyattribute(3 - 6).sval;
					delete yyattribute(6 - 6).sval;
				
#line 324 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 6:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[10];
			yyinitdebug(yya, 10);
#endif
			{
#line 278 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateUser(yyattribute(3 - 9).sval, yyattribute(6 - 9).sval, yyattribute(9 - 9).nval);
					delete yyattribute(3 - 9).sval;
					delete yyattribute(6 - 9).sval;
				
#line 341 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 7:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[10];
			yyinitdebug(yya, 10);
#endif
			{
#line 284 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					ASSERT(yyattribute(9 - 9).slval);
					g_sdbms.DoCreateUser(yyattribute(3 - 9).sval, yyattribute(6 - 9).sval, yyattribute(9 - 9).slval->m_nClassifaction);
					delete yyattribute(3 - 9).sval;
					delete yyattribute(6 - 9).sval;
					delete yyattribute(9 - 9).slval;
				
#line 360 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 8:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 295 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.PreDropUser(g_strUserNames);
					g_strUserNames[0] = '\0';
				
#line 376 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 9:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 301 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"
	yyval.sval = yyattribute(1 - 1).sval;	
#line 389 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 10:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 304 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

											strcat(g_strUserNames, ",");
											strcat(g_strUserNames, yyattribute(3 - 3).sval);
											delete yyattribute(3 - 3).sval;
										
#line 406 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 11:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 309 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

											strcat(g_strUserNames, yyattribute(1 - 1).sval);
											delete yyattribute(1 - 1).sval;
										
#line 422 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 12:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 315 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"
	yyval.sval = yyattribute(1 - 1).sval;	
#line 435 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 13:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 320 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateRole(yyattribute(3 - 3).sval);
					delete yyattribute(3 - 3).sval;	
				
#line 451 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 14:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[8];
			yyinitdebug(yya, 8);
#endif
			{
#line 325 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateRole(yyattribute(3 - 7).sval);
					g_sdbms.DoSetParentRole(yyattribute(7 - 7).sval, yyattribute(3 - 7).sval);
					delete yyattribute(3 - 7).sval;
					delete yyattribute(7 - 7).sval;
				
#line 469 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 15:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[8];
			yyinitdebug(yya, 8);
#endif
			{
#line 332 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.DoCreateRole(yyattribute(3 - 7).sval);
					g_sdbms.PreSetParentRole(yyattribute(3 - 7).sval, g_strRoleNames);
					g_strRoleNames[0] = '\0';
					delete yyattribute(3 - 7).sval;
				
#line 487 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 16:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 342 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"
	
					g_sdbms.PreDropRole(g_strRoleNames);
					g_strRoleNames[0] = '\0';
				
#line 503 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 17:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 348 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"
	yyval.sval = yyattribute(1 - 1).sval;	
#line 516 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 18:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 351 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

											strcat(g_strRoleNames, ",");
											strcat(g_strRoleNames, yyattribute(3 - 3).sval);
											delete yyattribute(3 - 3).sval;
										
#line 533 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 19:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 356 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

											strcat(g_strRoleNames, yyattribute(1 - 1).sval);
											delete yyattribute(1 - 1).sval;
										
#line 549 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 20:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[7];
			yyinitdebug(yya, 7);
#endif
			{
#line 365 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.PreSetParentRole(yyattribute(4 - 6).sval, g_strRoleNames);
					g_strRoleNames[0] = '\0';
					delete yyattribute(4 - 6).sval;
				
#line 566 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}
		break;
	case 21:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[7];
			yyinitdebug(yya, 7);
#endif
			{
#line 375 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.y"

					g_sdbms.PreSetChildRole(yyattribute(6 - 6).sval, g_strRoleNames);
					g_strRoleNames[0] = '\0';
					delete yyattribute(6 - 6).sval;
				
#line 583 "E:\\cm\\test\\SdbmsDemo\\sdbms_sql.cpp"
			}
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -