diff options
Diffstat (limited to '')
-rw-r--r-- | lib/parser.mly | 31 |
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) } + ; |