Skip to content
This repository was archived by the owner on Jan 8, 2024. It is now read-only.

Commit e100f99

Browse files
committed
Create a better grammar
1 parent debe3cb commit e100f99

File tree

3 files changed

+75
-45
lines changed

3 files changed

+75
-45
lines changed

dbgrammar.js

Whitespace-only changes.

src/grammar/dbgrammar.js

+61-27
Original file line numberDiff line numberDiff line change
@@ -35,44 +35,84 @@ var grammar = {
3535
list: match[4],
3636
}
3737
}},
38-
{"name": "table_definition$string$1", "symbols": [{"literal":"T"}, {"literal":"a"}, {"literal":"b"}, {"literal":"l"}, {"literal":"e"}, {"literal":" "}], "postprocess": function joiner(d) {return d.join('');}},
39-
{"name": "table_definition$string$2", "symbols": [{"literal":" "}, {"literal":"{"}], "postprocess": function joiner(d) {return d.join('');}},
40-
{"name": "table_definition", "symbols": ["table_definition$string$1", "name", "table_definition$string$2", "NL", "columns", "NL", {"literal":"}"}], "postprocess": (match) => {
38+
{"name": "table_definition$subexpression$1$ebnf$1", "symbols": []},
39+
{"name": "table_definition$subexpression$1$ebnf$1$subexpression$1", "symbols": [{"literal":" "}]},
40+
{"name": "table_definition$subexpression$1$ebnf$1", "symbols": ["table_definition$subexpression$1$ebnf$1", "table_definition$subexpression$1$ebnf$1$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
41+
{"name": "table_definition$subexpression$1$subexpression$1$string$1", "symbols": [{"literal":"T"}, {"literal":"a"}, {"literal":"b"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}},
42+
{"name": "table_definition$subexpression$1$subexpression$1", "symbols": ["table_definition$subexpression$1$subexpression$1$string$1"]},
43+
{"name": "table_definition$subexpression$1$subexpression$1$string$2", "symbols": [{"literal":"t"}, {"literal":"a"}, {"literal":"b"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}},
44+
{"name": "table_definition$subexpression$1$subexpression$1", "symbols": ["table_definition$subexpression$1$subexpression$1$string$2"]},
45+
{"name": "table_definition$subexpression$1$subexpression$1$string$3", "symbols": [{"literal":"T"}, {"literal":"A"}, {"literal":"B"}, {"literal":"L"}, {"literal":"E"}], "postprocess": function joiner(d) {return d.join('');}},
46+
{"name": "table_definition$subexpression$1$subexpression$1", "symbols": ["table_definition$subexpression$1$subexpression$1$string$3"]},
47+
{"name": "table_definition$subexpression$1", "symbols": ["table_definition$subexpression$1$ebnf$1", "table_definition$subexpression$1$subexpression$1"]},
48+
{"name": "table_definition$ebnf$1$subexpression$1", "symbols": ["_"]},
49+
{"name": "table_definition$ebnf$1", "symbols": ["table_definition$ebnf$1$subexpression$1"]},
50+
{"name": "table_definition$ebnf$1$subexpression$2", "symbols": ["_"]},
51+
{"name": "table_definition$ebnf$1", "symbols": ["table_definition$ebnf$1", "table_definition$ebnf$1$subexpression$2"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
52+
{"name": "table_definition$ebnf$2", "symbols": []},
53+
{"name": "table_definition$ebnf$2$subexpression$1", "symbols": ["_"]},
54+
{"name": "table_definition$ebnf$2", "symbols": ["table_definition$ebnf$2", "table_definition$ebnf$2$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
55+
{"name": "table_definition$ebnf$3", "symbols": []},
56+
{"name": "table_definition$ebnf$3$subexpression$1", "symbols": ["_"]},
57+
{"name": "table_definition$ebnf$3", "symbols": ["table_definition$ebnf$3", "table_definition$ebnf$3$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
58+
{"name": "table_definition", "symbols": ["table_definition$subexpression$1", "table_definition$ebnf$1", "name", "table_definition$ebnf$2", {"literal":"{"}, "table_definition$ebnf$3", "NL", "columns", "NL", {"literal":"}"}], "postprocess": (match) => {
4159
return {
4260
type: "table",
43-
name: match[1],
44-
columns: match[4]
61+
name: match[2],
62+
columns: match[7]
4563
}
4664
}},
4765
{"name": "columns", "symbols": ["column_definition"]},
4866
{"name": "columns", "symbols": ["column_definition", "NL", "columns"], "postprocess": (match) => {
4967
return flatten([match[0],match[2]])
5068
}},
69+
{"name": "column_definition$ebnf$1", "symbols": []},
70+
{"name": "column_definition$ebnf$1$subexpression$1", "symbols": ["_"]},
71+
{"name": "column_definition$ebnf$1", "symbols": ["column_definition$ebnf$1", "column_definition$ebnf$1$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
72+
{"name": "column_definition$ebnf$2", "symbols": []},
73+
{"name": "column_definition$ebnf$2$subexpression$1", "symbols": ["_"]},
74+
{"name": "column_definition$ebnf$2", "symbols": ["column_definition$ebnf$2", "column_definition$ebnf$2$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
5175
{"name": "column_definition$subexpression$1$subexpression$1", "symbols": []},
5276
{"name": "column_definition$subexpression$1", "symbols": ["column_definition$subexpression$1$subexpression$1"]},
53-
{"name": "column_definition$subexpression$1$subexpression$2", "symbols": [{"literal":" "}, "modifier_list"]},
77+
{"name": "column_definition$subexpression$1$subexpression$2", "symbols": ["modifier_list"]},
5478
{"name": "column_definition$subexpression$1", "symbols": ["column_definition$subexpression$1$subexpression$2"]},
55-
{"name": "column_definition", "symbols": ["name", {"literal":" "}, "column_type", "column_definition$subexpression$1"], "postprocess": (match) => {
79+
{"name": "column_definition", "symbols": ["column_definition$ebnf$1", "name", {"literal":" "}, "column_type", "column_definition$ebnf$2", "column_definition$subexpression$1"], "postprocess": (match) => {
5680
return {
57-
name: match[0],
58-
type: match[2],
59-
modifiers: flatten(match[3][0]).filter(item => item !== ' ')
81+
name: match[1],
82+
type: match[3],
83+
modifiers: flatten(match[5][0]).filter(item => item !== ' ')
6084
}
6185
}},
62-
{"name": "column_definition$ebnf$1$subexpression$1", "symbols": ["_"]},
63-
{"name": "column_definition$ebnf$1", "symbols": ["column_definition$ebnf$1$subexpression$1"]},
64-
{"name": "column_definition$ebnf$1$subexpression$2", "symbols": ["_"]},
65-
{"name": "column_definition$ebnf$1", "symbols": ["column_definition$ebnf$1", "column_definition$ebnf$1$subexpression$2"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
66-
{"name": "column_definition", "symbols": ["column_definition$ebnf$1", "column_definition"], "postprocess": (match) => {
67-
return match[1];
68-
} },
6986
{"name": "modifier_list", "symbols": ["modifier"], "postprocess": id},
70-
{"name": "modifier_list", "symbols": ["modifier_list", {"literal":","}, "modifier"], "postprocess": (match) => {
71-
return flatten([match[0],match[2]])
87+
{"name": "modifier_list$ebnf$1", "symbols": []},
88+
{"name": "modifier_list$ebnf$1$subexpression$1", "symbols": ["_"]},
89+
{"name": "modifier_list$ebnf$1", "symbols": ["modifier_list$ebnf$1", "modifier_list$ebnf$1$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
90+
{"name": "modifier_list$subexpression$1", "symbols": []},
91+
{"name": "modifier_list$subexpression$1", "symbols": [{"literal":","}]},
92+
{"name": "modifier_list$ebnf$2", "symbols": []},
93+
{"name": "modifier_list$ebnf$2$subexpression$1", "symbols": ["_"]},
94+
{"name": "modifier_list$ebnf$2", "symbols": ["modifier_list$ebnf$2", "modifier_list$ebnf$2$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
95+
{"name": "modifier_list", "symbols": ["modifier_list", "modifier_list$ebnf$1", "modifier_list$subexpression$1", "modifier_list$ebnf$2", "modifier"], "postprocess": (match) => {
96+
return flatten([match[0],match[4]])
7297
}},
73-
{"name": "modifier_list", "symbols": [{"literal":"["}, "modifier_list", {"literal":"]"}], "postprocess": (match) => {
74-
return match[1];
98+
{"name": "modifier_list$ebnf$3", "symbols": []},
99+
{"name": "modifier_list$ebnf$3$subexpression$1", "symbols": ["_"]},
100+
{"name": "modifier_list$ebnf$3", "symbols": ["modifier_list$ebnf$3", "modifier_list$ebnf$3$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
101+
{"name": "modifier_list$ebnf$4", "symbols": []},
102+
{"name": "modifier_list$ebnf$4$subexpression$1", "symbols": [{"literal":" "}]},
103+
{"name": "modifier_list$ebnf$4", "symbols": ["modifier_list$ebnf$4", "modifier_list$ebnf$4$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
104+
{"name": "modifier_list$ebnf$5", "symbols": []},
105+
{"name": "modifier_list$ebnf$5$subexpression$1", "symbols": ["_"]},
106+
{"name": "modifier_list$ebnf$5", "symbols": ["modifier_list$ebnf$5", "modifier_list$ebnf$5$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
107+
{"name": "modifier_list", "symbols": [{"literal":"["}, "modifier_list$ebnf$3", "modifier_list", "modifier_list$ebnf$4", {"literal":"]"}, "modifier_list$ebnf$5"], "postprocess": (match) => {
108+
return match[2];
75109
}},
110+
{"name": "modifier$string$1", "symbols": [{"literal":"n"}, {"literal":"o"}, {"literal":"t"}, {"literal":" "}, {"literal":"n"}, {"literal":"u"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}},
111+
{"name": "modifier", "symbols": ["modifier$string$1"], "postprocess": id},
112+
{"name": "modifier$string$2", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"i"}, {"literal":"q"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}},
113+
{"name": "modifier", "symbols": ["modifier$string$2"], "postprocess": id},
114+
{"name": "modifier$string$3", "symbols": [{"literal":"p"}, {"literal":"r"}, {"literal":"i"}, {"literal":"m"}, {"literal":"a"}, {"literal":"r"}, {"literal":"y"}, {"literal":" "}, {"literal":"k"}, {"literal":"e"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}},
115+
{"name": "modifier", "symbols": ["modifier$string$3"], "postprocess": id},
76116
{"name": "column_type$string$1", "symbols": [{"literal":"v"}, {"literal":"a"}, {"literal":"r"}, {"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}},
77117
{"name": "column_type", "symbols": ["column_type$string$1"], "postprocess": id},
78118
{"name": "column_type$string$2", "symbols": [{"literal":"i"}, {"literal":"n"}, {"literal":"t"}, {"literal":"e"}, {"literal":"g"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}},
@@ -93,12 +133,6 @@ var grammar = {
93133
(match) => `${match[0]}(${match[2][0].join('')})`
94134
},
95135
{"name": "column_type", "symbols": ["enum_var"], "postprocess": id},
96-
{"name": "modifier$string$1", "symbols": [{"literal":"n"}, {"literal":"o"}, {"literal":"t"}, {"literal":" "}, {"literal":"n"}, {"literal":"u"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}},
97-
{"name": "modifier", "symbols": ["modifier$string$1"], "postprocess": id},
98-
{"name": "modifier$string$2", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"i"}, {"literal":"q"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}},
99-
{"name": "modifier", "symbols": ["modifier$string$2"], "postprocess": id},
100-
{"name": "modifier$string$3", "symbols": [{"literal":"p"}, {"literal":"r"}, {"literal":"i"}, {"literal":"m"}, {"literal":"a"}, {"literal":"r"}, {"literal":"y"}, {"literal":" "}, {"literal":"k"}, {"literal":"e"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}},
101-
{"name": "modifier", "symbols": ["modifier$string$3"], "postprocess": id},
102136
{"name": "enum_list", "symbols": ["name"], "postprocess": id},
103137
{"name": "enum_list", "symbols": ["name", "NL", "enum_list"], "postprocess": (match) => {
104138
return flatten([match[0], match[2]]);

src/grammar/dbgrammar.ne

+14-18
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,39 @@ enum_definition -> "Enum " name " {" NL enum_list NL "}"
2424
list: match[4],
2525
}
2626
}%}
27-
table_definition -> "Table " name " {" NL columns NL "}"
27+
table_definition -> ((" "):* ("Table"|"table"|"TABLE")) (_):+ name (_):* "{" (_):* NL columns NL (_):* "}"
2828
{%(match) => {
2929
return {
3030
type: "table",
31-
name: match[1],
32-
columns: match[4]
31+
name: match[2],
32+
columns: match[7]
3333
}
3434
}%}
3535
columns -> column_definition
3636
| column_definition NL columns
3737
{% (match) => {
3838
return flatten([match[0],match[2]])
3939
}%}
40-
column_definition -> name " " column_type ((null)
41-
| (" " modifier_list))
40+
column_definition -> (_):* name " " column_type (_):* ((null)| (modifier_list))
4241
{% (match) => {
4342
return {
44-
name: match[0],
45-
type: match[2],
46-
modifiers: flatten(match[3][0]).filter(item => item !== ' ')
43+
name: match[1],
44+
type: match[3],
45+
modifiers: flatten(match[5][0]).filter(item => item !== ' ')
4746
}
4847
}%}
49-
| (_):+ column_definition {% (match) => {
50-
return match[1];
51-
} %}
5248
modifier_list -> modifier {% id %}
53-
| modifier_list "," modifier
49+
| modifier_list (_):* (null|",") (_):* modifier
5450
{% (match) => {
55-
return flatten([match[0],match[2]])
51+
return flatten([match[0],match[4]])
5652
}%}
57-
| "[" modifier_list "]"
53+
| "[" (_):* modifier_list (" "):* "]" (_):*
5854
{% (match) => {
59-
return match[1];
55+
return match[2];
6056
}%}
57+
modifier -> "not null" {%id%}
58+
| "unique" {%id%}
59+
| "primary key" {%id%}
6160
column_type -> "varchar" {%id%}
6261
| "integer" {%id%}
6362
| "float" {%id%}
@@ -69,9 +68,6 @@ column_type -> "varchar" {%id%}
6968
(match) => `${match[0]}(${match[2][0].join('')})`
7069
%}
7170
| enum_var {% id %}
72-
modifier -> "not null" {%id%}
73-
| "unique" {%id%}
74-
| "primary key" {%id%}
7571
enum_list -> name {%id%}
7672
| name NL enum_list
7773
{% (match) => {

0 commit comments

Comments
 (0)