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
44
45
46
47
48
49
50
51
52
53
| /*
| Language: Extended Backus-Naur Form
| Author: Alex McKibben <alex@nullscope.net>
| Website: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form
| */
|
| /** @type LanguageFn */
| function ebnf(hljs) {
| const commentMode = hljs.COMMENT(/\(\*/, /\*\)/);
|
| const nonTerminalMode = {
| className: "attribute",
| begin: /^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/
| };
|
| const specialSequenceMode = {
| className: "meta",
| begin: /\?.*\?/
| };
|
| const ruleBodyMode = {
| begin: /=/,
| end: /[.;]/,
| contains: [
| commentMode,
| specialSequenceMode,
| {
| // terminals
| className: 'string',
| variants: [
| hljs.APOS_STRING_MODE,
| hljs.QUOTE_STRING_MODE,
| {
| begin: '`',
| end: '`'
| }
| ]
| }
| ]
| };
|
| return {
| name: 'Extended Backus-Naur Form',
| illegal: /\S/,
| contains: [
| commentMode,
| nonTerminalMode,
| ruleBodyMode
| ]
| };
| }
|
| module.exports = ebnf;
|
|