26 lines
691 B
JavaScript
26 lines
691 B
JavaScript
![]() |
// Ref: https://yaml.org/spec/1.2/spec.html#schema/core/
|
||
|
|
||
|
module.exports = grammar({
|
||
|
name: "schema",
|
||
|
extras: $ => [],
|
||
|
rules: {
|
||
|
pln: $ => choice($.nul, $.bol, $.int, $.flt),
|
||
|
nul: $ => /~|null|Null|NULL/,
|
||
|
bol: $ => /true|True|TRUE|false|False|FALSE/,
|
||
|
int: $ => or([
|
||
|
/[-+]?[0-9]+/, // base 10
|
||
|
/0o[0-7]+/, // base 8
|
||
|
/0x[0-9a-fA-F]+/, // base 16
|
||
|
]),
|
||
|
flt: $ => or([
|
||
|
/[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?/, // number
|
||
|
/[-+]?(\.inf|\.Inf|\.INF)/, // infinity
|
||
|
/(\.nan|\.NaN|\.NAN)/, // not a number
|
||
|
]),
|
||
|
},
|
||
|
});
|
||
|
|
||
|
function or(regexList) {
|
||
|
return new RegExp(regexList.map(regex => `(${regex.source})`).join('|'));
|
||
|
}
|