-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
bison.js
47 lines (46 loc) · 1.34 KB
/
bison.js
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
// @ts-nocheck
import refractorC from './c.js'
bison.displayName = 'bison'
bison.aliases = []
/** @type {import('../core.js').Syntax} */
export default function bison(Prism) {
Prism.register(refractorC)
Prism.languages.bison = Prism.languages.extend('c', {})
Prism.languages.insertBefore('bison', 'comment', {
bison: {
// This should match all the beginning of the file
// including the prologue(s), the bison declarations and
// the grammar rules.
pattern: /^(?:[^%]|%(?!%))*%%[\s\S]*?%%/,
inside: {
c: {
// Allow for one level of nested braces
pattern: /%\{[\s\S]*?%\}|\{(?:\{[^}]*\}|[^{}])*\}/,
inside: {
delimiter: {
pattern: /^%?\{|%?\}$/,
alias: 'punctuation'
},
'bison-variable': {
pattern: /[$@](?:<[^\s>]+>)?[\w$]+/,
alias: 'variable',
inside: {
punctuation: /<|>/
}
},
rest: Prism.languages.c
}
},
comment: Prism.languages.c.comment,
string: Prism.languages.c.string,
property: /\S+(?=:)/,
keyword: /%\w+/,
number: {
pattern: /(^|[^@])\b(?:0x[\da-f]+|\d+)/i,
lookbehind: true
},
punctuation: /%[%?]|[|:;\[\]<>]/
}
}
})
}