-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.mly
43 lines (34 loc) · 862 Bytes
/
parser.mly
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
%{
open Types
%}
%token<string> MAJIDENT
%token<int> INT
%token EOF LPAREN RPAREN SEMICOLON CREATE TABLE REFERENCES NOT NULL PRIMARY KEY
%token VARCHAR NUMBER CHAR
%start start
%type <Types.sql_table list> start
%%
start:
| tables EOF { $1 }
tables:
| table { [$1] }
| table tables { $1 :: $2 }
table:
| CREATE TABLE MAJIDENT LPAREN fields RPAREN { Table ($3, $5) }
fields:
| field { [$1] }
| field SEMICOLON fields { $1 :: $3 }
field:
| MAJIDENT ftype { Field ($1, $2, []) }
| MAJIDENT ftype foptions { Field ($1, $2, $3) }
foptions:
| foption { [$1] }
| foption foptions { $1 :: $2 }
foption:
| NOT NULL { NotNull }
| PRIMARY KEY { PrimaryKey }
| REFERENCES MAJIDENT LPAREN MAJIDENT RPAREN { References ($2, $4) }
ftype:
| VARCHAR LPAREN INT RPAREN { Varchar ($3) }
| NUMBER LPAREN INT RPAREN { Number ($3) }
| CHAR LPAREN INT RPAREN { Char ($3) }