aboutsummaryrefslogtreecommitdiff
path: root/lib/parser.mly
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/parser.mly31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/parser.mly b/lib/parser.mly
new file mode 100644
index 0000000..f2f53fd
--- /dev/null
+++ b/lib/parser.mly
@@ -0,0 +1,31 @@
+%{
+ open Ast_types
+%}
+%token COMMA
+%token <string> IDENTIFIER
+%token UUIDV4
+%token NEWLINE
+%token NAME
+%token COLON
+%token DOT
+%token EOF
+%start <ast_table option > prog
+%%
+
+prog:
+ | e = expr; EOF { Some e }
+ ;
+
+expr:
+ | tbl = IDENTIFIER; COLON; r = row; NEWLINE; e = expr { Table (tbl,r, e) }
+ | tbl = IDENTIFIER; COLON; r = row { Table (tbl,r, End) }
+ ;
+
+row:
+ | row_title = IDENTIFIER; parent = IDENTIFIER; DOT; parent_id = IDENTIFIER; COMMA; r = row { Foreign (parent,parent_id,row_title, r) }
+ | row_title = IDENTIFIER; parent = IDENTIFIER; DOT; parent_id = IDENTIFIER; { Foreign (parent,parent_id,row_title, End) }
+ | row_title = IDENTIFIER; UUIDV4; COMMA; r = row { Uuidv4 (row_title, r) }
+ | row_title = IDENTIFIER; UUIDV4 { Uuidv4 (row_title, End) }
+ | row_title = IDENTIFIER; NAME; COMMA; r = row { Name (row_title, r) }
+ | row_title = IDENTIFIER; NAME { Name (row_title, End) }
+ ;