From 262f161f42c4e59beec41c6f440336c38385426a Mon Sep 17 00:00:00 2001 From: Marc Coquand Date: Wed, 20 Dec 2023 20:46:00 -0600 Subject: Initial commit --- lib/parser.mly | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/parser.mly (limited to 'lib/parser.mly') 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 IDENTIFIER +%token UUIDV4 +%token NEWLINE +%token NAME +%token COLON +%token DOT +%token EOF +%start 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) } + ; -- cgit v1.2.3