![Ika](/assets/img/avatar_default.png)
Ref: https://yaml.org/spec/1.2/spec.html#schema/core/ - `null_scalar` - `boolean_scalar` - `integer_scalar` - `float_scalar` - `string_scalar`
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('|'));
|
|
}
|