myuan 2 år sedan
förälder
incheckning
36ea30d646
3 ändrade filer med 18 tillägg och 5 borttagningar
  1. 2 0
      src/calc.l
  2. 15 4
      src/calc.y
  3. 1 1
      target.sql

+ 2 - 0
src/calc.l

@@ -3,6 +3,7 @@
 
 %{
 #include <stdio.h>
+#include <cjson/cJSON.h>
 
 
 #include "calc.tab.h"
@@ -49,6 +50,7 @@ extern YYSTYPE yylval;
 [(]         return *yytext;
 [)]         return *yytext;
 
+"primary key"	{cp_yylval_and_return(PRIMARY_KEY);}
 
 "quit"		{return QUIT;}
 

+ 15 - 4
src/calc.y

@@ -33,10 +33,11 @@ cJSON* jroot;
 %token AND OR NOT IN 
 %token INT FLOAT STRING
 %token LPAREN RPAREN COMMA
+%token PRIMARY_KEY
 
 %token QUIT NEWLINE
 
-%type <sv> IDENTIFIER data_type
+%type <sv> IDENTIFIER data_type PRIMARY_KEY col_options
 %type <jv> create_definition create_col_list create_table_stmt
 
 %start statement
@@ -84,15 +85,25 @@ create_col_list: create_definition {
 	}
     ;
 
-create_definition: IDENTIFIER data_type {
+create_definition: IDENTIFIER data_type col_options {
+		printf("得列 %s %s with options %s: %d\n", $1, $2, $3, strlen($3));
+
 		cJSON* node = cJSON_CreateObject();
 		cJSON_AddStringToObject(node, "type", "create_column");
 		cJSON_AddStringToObject(node, "column_name", $1);
 		cJSON_AddStringToObject(node, "data_type", $2);
+		if (strlen($3) > 0){
+			cJSON_AddTrueToObject(node, "primary_key");
+		} else {
+			cJSON_AddFalseToObject(node, "primary_key");
+		}
 		$$ = node;
-		printf("得列 %s %s\n", $1, $2);
 };
-
+col_options: {$$ = "";}
+	| PRIMARY_KEY {
+		// printf("得到主键 %s\n", $1);
+		$$ = $1;
+	}
 
 data_type: INT
 	| FLOAT

+ 1 - 1
target.sql

@@ -4,7 +4,7 @@ create table tb (col1 INT, col2 string, col3 FLOAT);
 
 create table tb1 (
     col1 int primary key, 
-    col2 string
+    col2 FLOAT
 );
 
 create table tb2 (