1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | function ebnf(hljs) {
|
9 | const commentMode = hljs.COMMENT(/\(\*/, /\*\)/);
|
10 |
|
11 | const nonTerminalMode = {
|
12 | className: "attribute",
|
13 | begin: /^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/
|
14 | };
|
15 |
|
16 | const specialSequenceMode = {
|
17 | className: "meta",
|
18 | begin: /\?.*\?/
|
19 | };
|
20 |
|
21 | const ruleBodyMode = {
|
22 | begin: /=/,
|
23 | end: /[.;]/,
|
24 | contains: [
|
25 | commentMode,
|
26 | specialSequenceMode,
|
27 | {
|
28 |
|
29 | className: 'string',
|
30 | variants: [
|
31 | hljs.APOS_STRING_MODE,
|
32 | hljs.QUOTE_STRING_MODE,
|
33 | {
|
34 | begin: '`',
|
35 | end: '`'
|
36 | }
|
37 | ]
|
38 | }
|
39 | ]
|
40 | };
|
41 |
|
42 | return {
|
43 | name: 'Extended Backus-Naur Form',
|
44 | illegal: /\S/,
|
45 | contains: [
|
46 | commentMode,
|
47 | nonTerminalMode,
|
48 | ruleBodyMode
|
49 | ]
|
50 | };
|
51 | }
|
52 |
|
53 | export { ebnf as default };
|