Ver código fonte

格式化代码

myuan 2 anos atrás
pai
commit
cadd5b585d
1 arquivos alterados com 39 adições e 48 exclusões
  1. 39 48
      src/calc.y

+ 39 - 48
src/calc.y

@@ -16,7 +16,6 @@ int yydebug=1;
 
 
 void yyerror(const char* s);
 void yyerror(const char* s);
 
 
-char* catstr(char* s1, char* s2);
 cJSON* jroot;
 cJSON* jroot;
 
 
 
 
@@ -117,37 +116,31 @@ create_table_stmt: CREATE TABLE IDENTIFIER
 		cJSON_AddStringToObject(node, "type", "create_table");
 		cJSON_AddStringToObject(node, "type", "create_table");
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddItemToObject(node, "cols", cJSON_CreateArray());
 		cJSON_AddItemToObject(node, "cols", cJSON_CreateArray());
-		$$=node;
+		$$ = node;
 	}
 	}
+;
 
 
 create_table_stmt: CREATE TABLE IDENTIFIER '(' create_col_list ')' {
 create_table_stmt: CREATE TABLE IDENTIFIER '(' create_col_list ')' {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", "create_table");
 		cJSON_AddStringToObject(node, "type", "create_table");
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddItemToObject(node, "cols", $5);
 		cJSON_AddItemToObject(node, "cols", $5);
-		$$=node;
-};
+		$$ = node;
+	}
+;
 
 
 create_col_list: create_definition {
 create_col_list: create_definition {
 	cJSON* node = cJSON_CreateArray();
 	cJSON* node = cJSON_CreateArray();
 	cJSON_AddItemToArray(node, $1);
 	cJSON_AddItemToArray(node, $1);
-	$$=node;
-	// printf("得create_definition %s\n", cJSON_Print($1));
+	$$ = node;
 }
 }
     |  create_col_list ',' create_definition {
     |  create_col_list ',' create_definition {
-		// printf("迭代 create_col_list\n %s", cJSON_Print($1));
-		// printf("迭代 create_definition\n %s", cJSON_Print($3));
-
 		cJSON_AddItemToArray($1, $3);
 		cJSON_AddItemToArray($1, $3);
-
-		$$=$1;
-		// printf("迭代\n %s", cJSON_Print($$));
+		$$ = $1;
 	}
 	}
-    ;
+;
 
 
 create_definition: IDENTIFIER data_type col_options {
 create_definition: IDENTIFIER data_type col_options {
-		// fprintf(stderr, "得列 %s %s with options %s: %d\n", $1, $2, $3, strlen($3));
-
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", "create_column");
 		cJSON_AddStringToObject(node, "type", "create_column");
 		cJSON_AddStringToObject(node, "column_name", $1);
 		cJSON_AddStringToObject(node, "column_name", $1);
@@ -158,12 +151,15 @@ create_definition: IDENTIFIER data_type col_options {
 			cJSON_AddFalseToObject(node, "primary_key");
 			cJSON_AddFalseToObject(node, "primary_key");
 		}
 		}
 		$$ = node;
 		$$ = node;
-};
+	}
+;
+
 col_options: {$$ = "";}
 col_options: {$$ = "";}
 	| PRIMARY_KEY {
 	| PRIMARY_KEY {
 		// printf("得到主键 %s\n", $1);
 		// printf("得到主键 %s\n", $1);
 		$$ = $1;
 		$$ = $1;
 	}
 	}
+;
 
 
 data_type: INT_T
 data_type: INT_T
 	| FLOAT_T
 	| FLOAT_T
@@ -176,24 +172,20 @@ insert_stmt: INSERT INTO IDENTIFIER VALUES '(' insert_list ')' {
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddItemToObject(node, "values", $6);
 		cJSON_AddItemToObject(node, "values", $6);
 		$$=node;
 		$$=node;
-};
+	}
+;
 
 
 insert_list: data_value {
 insert_list: data_value {
-	cJSON* node = cJSON_CreateArray();
-	cJSON_AddItemToArray(node, $1);
-	$$=node;
-	// printf("得create_definition %s\n", cJSON_Print($1));
-}
+		cJSON* node = cJSON_CreateArray();
+		cJSON_AddItemToArray(node, $1);
+		$$=node;
+	}
     |  insert_list ',' data_value {
     |  insert_list ',' data_value {
-		// printf("迭代 create_col_list\n %s", cJSON_Print($1));
-		// printf("迭代 create_definition\n %s", cJSON_Print($3));
-
 		cJSON_AddItemToArray($1, $3);
 		cJSON_AddItemToArray($1, $3);
-
 		$$=$1;
 		$$=$1;
-		// printf("迭代\n %s", cJSON_Print($$));
 	}
 	}
 ;
 ;
+
 data_value: INT_V {SIMPLE_TYPE_VALUE_OBJECT($$, int, Number, $1);}
 data_value: INT_V {SIMPLE_TYPE_VALUE_OBJECT($$, int, Number, $1);}
 	| FLOAT_V {SIMPLE_TYPE_VALUE_OBJECT($$, float, Number, $1);}
 	| FLOAT_V {SIMPLE_TYPE_VALUE_OBJECT($$, float, Number, $1);}
 	| STRING_V {SIMPLE_TYPE_VALUE_OBJECT($$, string, String, $1);}
 	| STRING_V {SIMPLE_TYPE_VALUE_OBJECT($$, string, String, $1);}
@@ -206,7 +198,9 @@ update_stmt: UPDATE IDENTIFIER SET update_list WHERE where_expr {
 		cJSON_AddItemToObject(node, "set", $4);
 		cJSON_AddItemToObject(node, "set", $4);
 		cJSON_AddItemToObject(node, "where", $6);
 		cJSON_AddItemToObject(node, "where", $6);
 		$$=node;
 		$$=node;
-};
+	}
+;
+
 update_list: single_assign_item {
 update_list: single_assign_item {
 		cJSON* node = cJSON_CreateArray();
 		cJSON* node = cJSON_CreateArray();
 		cJSON_AddItemToArray(node, $1);
 		cJSON_AddItemToArray(node, $1);
@@ -227,7 +221,6 @@ single_assign_item: identifier '=' identifier_or_const_value {
 	}
 	}
 ;
 ;
 
 
-
 single_expr: identifier {$$=$1;}
 single_expr: identifier {$$=$1;}
 	| IDENTIFIER '.' IDENTIFIER {
 	| IDENTIFIER '.' IDENTIFIER {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
@@ -239,11 +232,13 @@ single_expr: identifier {$$=$1;}
 	| data_value {$$=$1;}
 	| data_value {$$=$1;}
 	// | '(' single_expr ')' {$$=$2;}
 	// | '(' single_expr ')' {$$=$2;}
 ;
 ;
+
 where_expr: logical_expr {
 where_expr: logical_expr {
 		MEET_JSON(logical_expr from where_expr, $1);
 		MEET_JSON(logical_expr from where_expr, $1);
 		$$=$1;
 		$$=$1;
 	}
 	}
 ;
 ;
+
 op_where_expr: {$$=cJSON_CreateObject();} 
 op_where_expr: {$$=cJSON_CreateObject();} 
 	| WHERE where_expr {$$=$2;}
 	| WHERE where_expr {$$=$2;}
 ;
 ;
@@ -253,14 +248,13 @@ compare_expr: compare_expr bin_cmp_op compare_expr {
 	SIMPLE_OP_NODE($$, $2, $1, $3);}
 	SIMPLE_OP_NODE($$, $2, $1, $3);}
 	| single_expr {MEET_JSON(single_expr from compare_expr, $1); $$=$1;}
 	| single_expr {MEET_JSON(single_expr from compare_expr, $1); $$=$1;}
 	| '(' where_expr ')' {MEET(括号where_expr from compare_expr); $$=$2;}
 	| '(' where_expr ')' {MEET(括号where_expr from compare_expr); $$=$2;}
-
 ;
 ;
-negative_expr: NOT negative_expr {
-		fprintf(stderr, "negative_expr\n");
-	SIMPLE_OP_NODE_ONLY_LEFT($$, "非", $2);}
+
+negative_expr: NOT negative_expr {SIMPLE_OP_NODE_ONLY_LEFT($$, "非", $2);}
 	| compare_expr {MEET_JSON(compare_expr from negative_expr, $1) $$=$1;}
 	| compare_expr {MEET_JSON(compare_expr from negative_expr, $1) $$=$1;}
 	| '(' negative_expr ')' {MEET_JSON(negative_expr from negative_expr, $2) $$=$2;}
 	| '(' negative_expr ')' {MEET_JSON(negative_expr from negative_expr, $2) $$=$2;}
 ;
 ;
+
 contains_expr: identifier bin_contains_op '(' select_stmt ')' {
 contains_expr: identifier bin_contains_op '(' select_stmt ')' {
 		MEET_JSON(logical_expr bin_contains_op select_stmt, $2);
 		MEET_JSON(logical_expr bin_contains_op select_stmt, $2);
 		SIMPLE_OP_NODE($$, $2, $1, $4)
 		SIMPLE_OP_NODE($$, $2, $1, $4)
@@ -274,11 +268,11 @@ contains_expr: identifier bin_contains_op '(' select_stmt ')' {
 
 
 logical_expr: logical_expr bin_logical_op contains_expr {
 logical_expr: logical_expr bin_logical_op contains_expr {
 		fprintf(stderr, "logical_expr %s\n", $2);
 		fprintf(stderr, "logical_expr %s\n", $2);
-		SIMPLE_OP_NODE($$, $2, $1, $3);}
+		SIMPLE_OP_NODE($$, $2, $1, $3);
+	}
 	| contains_expr {MEET_JSON(contains_expr from logical_expr, $1); $$=$1;}
 	| contains_expr {MEET_JSON(contains_expr from logical_expr, $1); $$=$1;}
 	| single_expr {MEET_JSON(single_expr from logical_expr, $1) $$=$1;}
 	| single_expr {MEET_JSON(single_expr from logical_expr, $1) $$=$1;}
 	| negative_expr {MEET_JSON(negative_expr from logical_expr, $1); $$=$1;}
 	| negative_expr {MEET_JSON(negative_expr from logical_expr, $1); $$=$1;}
-
 ;
 ;
 
 
 
 
@@ -309,9 +303,9 @@ identifier: IDENTIFIER {
 	}
 	}
 ;
 ;
 
 
-identifier_or_const_value: identifier {$$=$1;}
-	| data_value {$$=$1;}
+identifier_or_const_value: identifier {$$=$1;} | data_value {$$=$1;}
 ;
 ;
+
 data_value_list: data_value {
 data_value_list: data_value {
 		cJSON* node = cJSON_CreateArray();
 		cJSON* node = cJSON_CreateArray();
 		cJSON_AddItemToArray(node, $1);
 		cJSON_AddItemToArray(node, $1);
@@ -322,9 +316,11 @@ data_value_list: data_value {
 		$$=$1;
 		$$=$1;
 	}
 	}
 ;
 ;
+
 identifier_or_const_value_or_const_value_list: identifier_or_const_value{$$=$1;}
 identifier_or_const_value_or_const_value_list: identifier_or_const_value{$$=$1;}
 	| data_value_list {$$=$1;}
 	| data_value_list {$$=$1;}
 ;
 ;
+
 where_condition_item: identifier_or_const_value bin_cmp_op identifier_or_const_value {
 where_condition_item: identifier_or_const_value bin_cmp_op identifier_or_const_value {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", $2);
 		cJSON_AddStringToObject(node, "type", $2);
@@ -341,7 +337,6 @@ where_condition_item: identifier_or_const_value bin_cmp_op identifier_or_const_v
 	}
 	}
 ;
 ;
 
 
-
 bin_cmp_op: '=' {$$ = "相等";}
 bin_cmp_op: '=' {$$ = "相等";}
 	| '>' {$$ = "大于";}
 	| '>' {$$ = "大于";}
 	| '<' {$$ = "小于";}
 	| '<' {$$ = "小于";}
@@ -359,13 +354,15 @@ bin_logical_op: AND {MEET(and from bin_log) $$ = "且";}
 bin_contains_op: IN {$$ = "包含于";}
 bin_contains_op: IN {$$ = "包含于";}
 	| NOT IN {$$ = "不包含于";}
 	| NOT IN {$$ = "不包含于";}
 ;
 ;
+
 delete_stmt: DELETE FROM IDENTIFIER op_where_expr {
 delete_stmt: DELETE FROM IDENTIFIER op_where_expr {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", "delete");
 		cJSON_AddStringToObject(node, "type", "delete");
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddStringToObject(node, "table_name", $3);
 		cJSON_AddItemToObject(node, "where", $4);
 		cJSON_AddItemToObject(node, "where", $4);
 		$$=node;
 		$$=node;
-};
+	}
+;
 
 
 select_stmt: SELECT select_items FROM IDENTIFIER op_where_expr {
 select_stmt: SELECT select_items FROM IDENTIFIER op_where_expr {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
@@ -374,7 +371,7 @@ select_stmt: SELECT select_items FROM IDENTIFIER op_where_expr {
 		cJSON_AddStringToObject(node, "table_name", $4);
 		cJSON_AddStringToObject(node, "table_name", $4);
 		cJSON_AddItemToObject(node, "where", $5);
 		cJSON_AddItemToObject(node, "where", $5);
 		$$=node;
 		$$=node;
-}
+	}
 ;
 ;
 
 
 select_items: select_item {
 select_items: select_item {
@@ -387,6 +384,7 @@ select_items: select_item {
 		$$=$1;
 		$$=$1;
 	}
 	}
 ;
 ;
+
 select_item: single_expr {
 select_item: single_expr {
 		cJSON* node = cJSON_CreateObject();
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", "select_column");
 		cJSON_AddStringToObject(node, "type", "select_column");
@@ -406,6 +404,7 @@ select_item: single_expr {
 		$$=node;
 		$$=node;
 	}
 	}
 ;
 ;
+
 %%
 %%
 
 
 int main(int ac, char** av) {
 int main(int ac, char** av) {
@@ -416,7 +415,6 @@ int main(int ac, char** av) {
 		exit(1);
 		exit(1);
 	}
 	}
 
 
-	// yyin = av[1];
 	yy_scan_string(av[1]);
 	yy_scan_string(av[1]);
 	int res = yyparse();
 	int res = yyparse();
 	printf("%s\n", cJSON_Print(jroot));
 	printf("%s\n", cJSON_Print(jroot));
@@ -428,10 +426,3 @@ void yyerror(const char *s) {
 	exit(1);
 	exit(1);
 }
 }
 
 
-char* catstr(char* s1, char* s2) {
-	char* s = malloc(strlen(s1)+strlen(s2)+1);
-	strcpy(s, s1);
-	strcat(s, s2);
-	return s;
-}
-