// 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('|')); }