Skip to content

Commit 8cd1116

Browse files
committed
Move BNF BNF to grammars
Added `-` support in BNF identifiers Fix bnf script pattern output
1 parent 941a37a commit 8cd1116

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/bnf.bnf renamed to grammars/bnf.bnf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
string = '("(?:\\.|[^"\\])*"|\'(?:\\.|[^\'\\])*\')';
3-
identifier = '[a-zA-Z_]\w*';
3+
identifier = '[a-zA-Z_][\w-]*';
44
whitespace = '[ \t]+';
55
line_terminator = "\n+";
66
comment = "#(?!#)([^\n]*)";
@@ -30,6 +30,8 @@ term = parenthesized | optional | repetition | string | identifier;
3030
sequence = term*;
3131
expression = sequence {pipe sequence};
3232

33-
rule = identifier '=' expression ';';
33+
attribute = '@' identifier;
34+
35+
rule = attribute* identifier '=' expression ';';
3436

3537
##root rule directive

scripts/bnf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ switch (options.format) {
126126
literals: config.literals.map(literal => {
127127
const base = {
128128
name: literal.name,
129-
pattern: literal.pattern.source,
129+
pattern: literal.pattern.source.slice(1),
130130
};
131131

132132
const { flags } = literal.pattern;

src/bnf.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,19 @@
8787
{ "kind": "expression#0", "type": "repeated" }
8888
]
8989
},
90+
{
91+
"name": "attribute",
92+
"type": "sequence",
93+
"pattern": [
94+
{ "kind": "@", "type": "required" },
95+
{ "kind": "identifier", "type": "required" }
96+
]
97+
},
9098
{
9199
"name": "rule",
92100
"type": "sequence",
93101
"pattern": [
102+
{ "kind": "attribute", "type": "repeated" },
94103
{ "kind": "identifier", "type": "required" },
95104
{ "kind": "=", "type": "required" },
96105
{ "kind": "expression", "type": "required" },
@@ -100,7 +109,7 @@
100109
],
101110
"literals": [
102111
{ "name": "string", "pattern": "(\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*')" },
103-
{ "name": "identifier", "pattern": "[a-zA-Z_]\\w*" },
112+
{ "name": "identifier", "pattern": "[a-zA-Z_][\\w-]*" },
104113
{ "name": "whitespace", "pattern": "[ \\t]+" },
105114
{ "name": "line_terminator", "pattern": "\\n+" },
106115
{ "name": "comment", "pattern": "#(?!#)([^\\n]*)" },
@@ -115,6 +124,7 @@
115124
{ "name": "right_brace", "pattern": "\\}" },
116125
{ "name": "\\?", "pattern": "\\?" },
117126
{ "name": "\\*", "pattern": "\\*" },
127+
{ "name": "@", "pattern": "@" },
118128
{ "name": "=", "pattern": "=" },
119129
{ "name": ";", "pattern": ";" }
120130
],

0 commit comments

Comments
 (0)