feat: support core schema (#13)
Ref: https://yaml.org/spec/1.2/spec.html#schema/core/ - `null_scalar` - `boolean_scalar` - `integer_scalar` - `float_scalar` - `string_scalar`
This commit is contained in:
parent
523a6d7713
commit
6d74a6bb62
|
@ -37,13 +37,15 @@ console.log(tree.rootNode.toString());
|
||||||
// (block_mapping
|
// (block_mapping
|
||||||
// (block_mapping_pair
|
// (block_mapping_pair
|
||||||
// key: (flow_node
|
// key: (flow_node
|
||||||
// (plain_scalar))
|
// (plain_scalar
|
||||||
|
// (string_scalar)))
|
||||||
// value: (block_node
|
// value: (block_node
|
||||||
// (anchor)
|
// (anchor)
|
||||||
// (block_sequence
|
// (block_sequence
|
||||||
// (block_sequence_item
|
// (block_sequence_item
|
||||||
// (flow_node
|
// (flow_node
|
||||||
// (plain_scalar))))))))))
|
// (plain_scalar
|
||||||
|
// (string_scalar)))))))))))
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
354
corpus/schema.txt
Normal file
354
corpus/schema.txt
Normal file
|
@ -0,0 +1,354 @@
|
||||||
|
================================================================================
|
||||||
|
Example 10.4. !!null Examples
|
||||||
|
================================================================================
|
||||||
|
!!null null: value for null key
|
||||||
|
key with null value: !!null null
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(null_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(null_scalar))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Example 10.5. !!bool Examples
|
||||||
|
================================================================================
|
||||||
|
YAML is a superset of JSON: !!bool true
|
||||||
|
Pluto is a planet: !!bool false
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Example 10.6. !!int Examples
|
||||||
|
================================================================================
|
||||||
|
negative: !!int -12
|
||||||
|
zero: !!int 0
|
||||||
|
positive: !!int 34
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Example 10.7. !!float Examples
|
||||||
|
================================================================================
|
||||||
|
negative: !!float -1
|
||||||
|
zero: !!float 0
|
||||||
|
positive: !!float 2.3e4
|
||||||
|
infinity: !!float .inf
|
||||||
|
not a number: !!float .nan
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(tag)
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Example 10.8. JSON Tag Resolution
|
||||||
|
================================================================================
|
||||||
|
A null: null
|
||||||
|
Booleans: [ true, false ]
|
||||||
|
Integers: [ 0, -0, 3, -19 ]
|
||||||
|
Floats: [ 0., -0.0, 12e03, -2E+05 ]
|
||||||
|
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(null_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(null_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Example 10.9. Core Tag Resolution
|
||||||
|
================================================================================
|
||||||
|
A null: null
|
||||||
|
Also a null: # Empty
|
||||||
|
Not a null: ""
|
||||||
|
Booleans: [ true, True, false, FALSE ]
|
||||||
|
Integers: [ 0, 0o7, 0x3A, -19 ]
|
||||||
|
Floats: [ 0., -0.0, .5, +12e03, -2E+05 ]
|
||||||
|
Also floats: [ .inf, -.Inf, +.INF, .NAN ]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(stream
|
||||||
|
(document
|
||||||
|
(block_node
|
||||||
|
(block_mapping
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(null_scalar))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar))))
|
||||||
|
(comment)
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(double_quote_scalar)))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(boolean_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(integer_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))))
|
||||||
|
(block_mapping_pair
|
||||||
|
key: (flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(string_scalar)))
|
||||||
|
value: (flow_node
|
||||||
|
(flow_sequence
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar)))
|
||||||
|
(flow_node
|
||||||
|
(plain_scalar
|
||||||
|
(float_scalar))))))))))
|
2896
corpus/spec.txt
2896
corpus/spec.txt
File diff suppressed because it is too large
Load diff
25
grammar-schema.js
Normal file
25
grammar-schema.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
// 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('|'));
|
||||||
|
}
|
35
grammar.js
35
grammar.js
|
@ -38,10 +38,18 @@ module.exports = grammar({
|
||||||
$._r_sqt_str_ctn, $._br_sqt_str_ctn, // single quote scalar content
|
$._r_sqt_str_ctn, $._br_sqt_str_ctn, // single quote scalar content
|
||||||
$._r_sqt_esc_sqt, $._br_sqt_esc_sqt, // ''
|
$._r_sqt_esc_sqt, $._br_sqt_esc_sqt, // ''
|
||||||
$._r_sqt_str_end, $._br_sqt_str_end, // ' (end)
|
$._r_sqt_str_end, $._br_sqt_str_end, // ' (end)
|
||||||
$._r_sgl_pln_blk, $._br_sgl_pln_blk, $._b_sgl_pln_blk, // plain scalar (singleline in block)
|
|
||||||
$._r_sgl_pln_flw, $._br_sgl_pln_flw, // plain scalar (singleline in flow)
|
// plain scalar (singleline in block/flow)
|
||||||
$._r_mtl_pln_blk, $._br_mtl_pln_blk, // plain scalar (multiline in block)
|
$._r_sgl_pln_nul_blk, $._br_sgl_pln_nul_blk, $._b_sgl_pln_nul_blk, $._r_sgl_pln_nul_flw, $._br_sgl_pln_nul_flw,
|
||||||
$._r_mtl_pln_flw, $._br_mtl_pln_flw, // plain scalar (multiline in flow)
|
$._r_sgl_pln_bol_blk, $._br_sgl_pln_bol_blk, $._b_sgl_pln_bol_blk, $._r_sgl_pln_bol_flw, $._br_sgl_pln_bol_flw,
|
||||||
|
$._r_sgl_pln_int_blk, $._br_sgl_pln_int_blk, $._b_sgl_pln_int_blk, $._r_sgl_pln_int_flw, $._br_sgl_pln_int_flw,
|
||||||
|
$._r_sgl_pln_flt_blk, $._br_sgl_pln_flt_blk, $._b_sgl_pln_flt_blk, $._r_sgl_pln_flt_flw, $._br_sgl_pln_flt_flw,
|
||||||
|
$._r_sgl_pln_str_blk, $._br_sgl_pln_str_blk, $._b_sgl_pln_str_blk, $._r_sgl_pln_str_flw, $._br_sgl_pln_str_flw,
|
||||||
|
|
||||||
|
// plain scalar (multiline in block/flow)
|
||||||
|
$._r_mtl_pln_str_blk, $._br_mtl_pln_str_blk,
|
||||||
|
$._r_mtl_pln_str_flw, $._br_mtl_pln_str_flw,
|
||||||
|
|
||||||
$._r_tag, $._br_tag, $._b_tag, // !tag
|
$._r_tag, $._br_tag, $._b_tag, // !tag
|
||||||
$._r_acr, $._br_acr, $._b_acr, // &id
|
$._r_acr, $._br_acr, $._b_acr, // &id
|
||||||
$._r_als, $._br_als, $._b_als, // *id
|
$._r_als, $._br_als, $._b_als, // *id
|
||||||
|
@ -428,6 +436,19 @@ module.exports = grammar({
|
||||||
_r_pln_flw: $ => choice($._r_sgl_pln_flw, $._r_mtl_pln_flw),
|
_r_pln_flw: $ => choice($._r_sgl_pln_flw, $._r_mtl_pln_flw),
|
||||||
_br_pln_flw: $ => choice($._br_sgl_pln_flw, $._br_mtl_pln_flw),
|
_br_pln_flw: $ => choice($._br_sgl_pln_flw, $._br_mtl_pln_flw),
|
||||||
|
|
||||||
|
// plain scalar schema
|
||||||
|
|
||||||
|
_r_sgl_pln_blk: $ => choice($._r_sgl_pln_nul_blk, $._r_sgl_pln_bol_blk, $._r_sgl_pln_int_blk, $._r_sgl_pln_flt_blk, $._r_sgl_pln_str_blk),
|
||||||
|
_br_sgl_pln_blk: $ => choice($._br_sgl_pln_nul_blk, $._br_sgl_pln_bol_blk, $._br_sgl_pln_int_blk, $._br_sgl_pln_flt_blk, $._br_sgl_pln_str_blk),
|
||||||
|
_b_sgl_pln_blk: $ => choice($._b_sgl_pln_nul_blk, $._b_sgl_pln_bol_blk, $._b_sgl_pln_int_blk, $._b_sgl_pln_flt_blk, $._b_sgl_pln_str_blk),
|
||||||
|
_r_sgl_pln_flw: $ => choice($._r_sgl_pln_nul_flw, $._r_sgl_pln_bol_flw, $._r_sgl_pln_int_flw, $._r_sgl_pln_flt_flw, $._r_sgl_pln_str_flw),
|
||||||
|
_br_sgl_pln_flw: $ => choice($._br_sgl_pln_nul_flw, $._br_sgl_pln_bol_flw, $._br_sgl_pln_int_flw, $._br_sgl_pln_flt_flw, $._br_sgl_pln_str_flw),
|
||||||
|
|
||||||
|
_r_mtl_pln_blk: $ => $._r_mtl_pln_str_blk,
|
||||||
|
_br_mtl_pln_blk: $ => $._br_mtl_pln_str_blk,
|
||||||
|
_r_mtl_pln_flw: $ => $._r_mtl_pln_str_flw,
|
||||||
|
_br_mtl_pln_flw: $ => $._br_mtl_pln_str_flw,
|
||||||
|
|
||||||
// alias
|
// alias
|
||||||
|
|
||||||
_r_als_val: $ => $._r_als,
|
_r_als_val: $ => $._r_als,
|
||||||
|
@ -480,6 +501,12 @@ module.exports = global_alias(global_alias(module.exports, {
|
||||||
..._("escape_sequence", "_r_dqt_esc_nwl", "_br_dqt_esc_nwl",
|
..._("escape_sequence", "_r_dqt_esc_nwl", "_br_dqt_esc_nwl",
|
||||||
"_r_dqt_esc_seq", "_br_dqt_esc_seq",
|
"_r_dqt_esc_seq", "_br_dqt_esc_seq",
|
||||||
"_r_sqt_esc_sqt", "_br_sqt_esc_sqt"),
|
"_r_sqt_esc_sqt", "_br_sqt_esc_sqt"),
|
||||||
|
..._("null_scalar", "_r_sgl_pln_nul_blk", "_br_sgl_pln_nul_blk", "_b_sgl_pln_nul_blk", "_r_sgl_pln_nul_flw", "_br_sgl_pln_nul_flw"),
|
||||||
|
..._("boolean_scalar", "_r_sgl_pln_bol_blk", "_br_sgl_pln_bol_blk", "_b_sgl_pln_bol_blk", "_r_sgl_pln_bol_flw", "_br_sgl_pln_bol_flw"),
|
||||||
|
..._("integer_scalar", "_r_sgl_pln_int_blk", "_br_sgl_pln_int_blk", "_b_sgl_pln_int_blk", "_r_sgl_pln_int_flw", "_br_sgl_pln_int_flw"),
|
||||||
|
..._("float_scalar", "_r_sgl_pln_flt_blk", "_br_sgl_pln_flt_blk", "_b_sgl_pln_flt_blk", "_r_sgl_pln_flt_flw", "_br_sgl_pln_flt_flw"),
|
||||||
|
..._("string_scalar", "_r_sgl_pln_str_blk", "_br_sgl_pln_str_blk", "_b_sgl_pln_str_blk", "_r_sgl_pln_str_flw", "_br_sgl_pln_str_flw",
|
||||||
|
"_r_mtl_pln_str_blk", "_br_mtl_pln_str_blk", "_r_mtl_pln_str_flw", "_br_mtl_pln_str_flw"),
|
||||||
}), {
|
}), {
|
||||||
..._("---", "_s_drs_end"),
|
..._("---", "_s_drs_end"),
|
||||||
..._("...", "_s_doc_end"),
|
..._("...", "_s_doc_end"),
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "yarn tree-sitter test",
|
"test": "yarn tree-sitter test",
|
||||||
"prepack": "yarn tree-sitter generate",
|
"prepack": "bash ./scripts/update-schema.sh && yarn tree-sitter generate",
|
||||||
"release": "standard-version --commit-all",
|
"release": "standard-version --commit-all",
|
||||||
"tree-sitter": "./tree-sitter/target/release/tree-sitter"
|
"tree-sitter": "./tree-sitter/target/release/tree-sitter"
|
||||||
},
|
},
|
||||||
|
@ -31,6 +31,7 @@
|
||||||
"nan": "^2.14.0"
|
"nan": "^2.14.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"get-stdin": "^8.0.0",
|
||||||
"natural-orderby": "2.0.3",
|
"natural-orderby": "2.0.3",
|
||||||
"standard-version": "7.0.0"
|
"standard-version": "7.0.0"
|
||||||
},
|
},
|
||||||
|
|
85
scripts/update-schema.js
Normal file
85
scripts/update-schema.js
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
const getStdin = require("get-stdin");
|
||||||
|
|
||||||
|
const STATE_FREEZE = -1;
|
||||||
|
|
||||||
|
getStdin().then(stdin => {
|
||||||
|
const cases = extractCases(stdin);
|
||||||
|
const enums = ["RS_STR"];
|
||||||
|
const content = "switch (sch_stt) " + block([
|
||||||
|
`case ${STATE_FREEZE}:\n break;`,
|
||||||
|
cases
|
||||||
|
.map(([key, { content }]) => `${(key === "default" ? "default:" : `case ${key}:`)}\n${indent(content)}`)
|
||||||
|
.join("\n END_STATE();\n")
|
||||||
|
.replace(/ADVANCE\((\d+)\);/g, (_, state) => {
|
||||||
|
const stateCase = cases.find(([key]) => key === state);
|
||||||
|
if (stateCase) {
|
||||||
|
const [, { acceptToken }] = stateCase;
|
||||||
|
if (acceptToken) {
|
||||||
|
return `{${acceptToken} return ${state};}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return `{*rlt_sch = RS_STR; return ${state};}`;
|
||||||
|
})
|
||||||
|
.replace("ACCEPT_TOKEN(ts_builtin_sym_end);", "assert(false);")
|
||||||
|
.replace(/ACCEPT_TOKEN\((\w+)\);/g, (_, name) => {
|
||||||
|
const newName = "RS_" + name.replace("sym_", "").toUpperCase();
|
||||||
|
if (!enums.includes(newName)) {
|
||||||
|
enums.push(newName);
|
||||||
|
}
|
||||||
|
return `*rlt_sch = ${newName};`;
|
||||||
|
})
|
||||||
|
.replace(/END_STATE\(\);/g, `break;`)
|
||||||
|
.replace("return false;", `*rlt_sch = RS_STR;\n return ${STATE_FREEZE};`)
|
||||||
|
.replace(/lookahead/g, "cur_chr"),
|
||||||
|
]);
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.resolve(__dirname, "../src/schema.generated.cc"),
|
||||||
|
[
|
||||||
|
`#include <cassert>`,
|
||||||
|
`namespace tree_sitter_yaml {`,
|
||||||
|
`const int8_t SCH_STT_FRZ = ${STATE_FREEZE};`,
|
||||||
|
`enum ResultSchema ${block(enums.map((k) => `${k},`))};`,
|
||||||
|
`int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) ${block([
|
||||||
|
content,
|
||||||
|
`if (cur_chr != '\\r' && cur_chr != '\\n' && cur_chr != ' ' && cur_chr != 0) *rlt_sch = RS_STR;`,
|
||||||
|
`return ${STATE_FREEZE};`,
|
||||||
|
])}`,
|
||||||
|
`}`,
|
||||||
|
].join("\n\n"),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
function extractCases(stdin) {
|
||||||
|
const MAIN_SIGNATURE = "static bool ts_lex(TSLexer *lexer, TSStateId state) {";
|
||||||
|
const SWITCH_CASE = "switch (state) {\n";
|
||||||
|
const startIndex = stdin.indexOf(SWITCH_CASE, stdin.indexOf(MAIN_SIGNATURE)) + SWITCH_CASE.length;
|
||||||
|
const endIndex = stdin.indexOf("}\n}", startIndex);
|
||||||
|
const content = stdin.slice(startIndex, endIndex).replace(/^\s*if \(eof\).+\n/mg, "").trimEnd();
|
||||||
|
return dedent(dedent(content)).split("END_STATE();").map(text => {
|
||||||
|
const index = text.indexOf(":\n");
|
||||||
|
const key = text.slice(0, index).trim().replace(/^case /, "");
|
||||||
|
const content = dedent(text.slice(index + 2)).trim();
|
||||||
|
const matchAcceptToken = content.match(/^ACCEPT_TOKEN\(\w+\);/);
|
||||||
|
const acceptToken = matchAcceptToken && matchAcceptToken[0];
|
||||||
|
const hasAcceptTokenOnly = acceptToken && acceptToken.length === content.length;
|
||||||
|
return [key, { content, acceptToken, hasAcceptTokenOnly }];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function block(contents) {
|
||||||
|
return `{\n${indent(contents)}\n}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lines(contents) {
|
||||||
|
return [].concat(contents).join("\n").split("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function indent(contents) {
|
||||||
|
return lines(contents).map(x => " ".repeat(2) + x).join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function dedent(contents) {
|
||||||
|
return lines(contents).map(x => x.replace(/^ /mg, "")).join("\n");
|
||||||
|
}
|
11
scripts/update-schema.sh
Normal file
11
scripts/update-schema.sh
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
cd $(dirname "$0")/..
|
||||||
|
|
||||||
|
ROOT_DIR=$PWD
|
||||||
|
TREE_SITTER_CLI="$ROOT_DIR/tree-sitter/target/release/tree-sitter"
|
||||||
|
SCHEMA_GRAMMAR="$ROOT_DIR/grammar-schema.js"
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
cd $TEMP_DIR
|
||||||
|
cp $SCHEMA_GRAMMAR grammar.js
|
||||||
|
$TREE_SITTER_CLI generate
|
||||||
|
cat $TEMP_DIR/src/parser.c | node $ROOT_DIR/scripts/update-schema.js
|
384
src/grammar.json
generated
384
src/grammar.json
generated
|
@ -5989,6 +5989,292 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"_r_sgl_pln_blk": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_nul_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "null_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_bol_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "boolean_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "integer_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "float_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_br_sgl_pln_blk": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_nul_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "null_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_bol_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "boolean_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "integer_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "float_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_b_sgl_pln_blk": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_nul_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "null_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_bol_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "boolean_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "integer_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "float_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_r_sgl_pln_flw": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_nul_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "null_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_bol_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "boolean_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_int_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "integer_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_flt_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "float_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_str_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_br_sgl_pln_flw": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_nul_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "null_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_bol_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "boolean_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_int_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "integer_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_flt_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "float_scalar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_str_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_r_mtl_pln_blk": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_mtl_pln_str_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
},
|
||||||
|
"_br_mtl_pln_blk": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_mtl_pln_str_blk"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
},
|
||||||
|
"_r_mtl_pln_flw": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_mtl_pln_str_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
},
|
||||||
|
"_br_mtl_pln_flw": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_mtl_pln_str_flw"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "string_scalar"
|
||||||
|
},
|
||||||
"_r_als_val": {
|
"_r_als_val": {
|
||||||
"type": "ALIAS",
|
"type": "ALIAS",
|
||||||
"content": {
|
"content": {
|
||||||
|
@ -6334,39 +6620,119 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_sgl_pln_blk"
|
"name": "_r_sgl_pln_nul_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_sgl_pln_blk"
|
"name": "_br_sgl_pln_nul_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_b_sgl_pln_blk"
|
"name": "_b_sgl_pln_nul_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_sgl_pln_flw"
|
"name": "_r_sgl_pln_nul_flw"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_sgl_pln_flw"
|
"name": "_br_sgl_pln_nul_flw"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_mtl_pln_blk"
|
"name": "_r_sgl_pln_bol_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_mtl_pln_blk"
|
"name": "_br_sgl_pln_bol_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_r_mtl_pln_flw"
|
"name": "_b_sgl_pln_bol_blk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_br_mtl_pln_flw"
|
"name": "_r_sgl_pln_bol_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_bol_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_int_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_int_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_int_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_flt_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_flt_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_flt_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_b_sgl_pln_str_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_sgl_pln_str_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_sgl_pln_str_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_mtl_pln_str_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_mtl_pln_str_blk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_r_mtl_pln_str_flw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_br_mtl_pln_str_flw"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
|
|
49
src/node-types.json
generated
49
src/node-types.json
generated
|
@ -271,6 +271,37 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "plain_scalar",
|
||||||
|
"named": true,
|
||||||
|
"fields": {},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "boolean_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "float_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string_scalar",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "reserved_directive",
|
"type": "reserved_directive",
|
||||||
"named": true,
|
"named": true,
|
||||||
|
@ -406,6 +437,10 @@
|
||||||
"type": "anchor",
|
"type": "anchor",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "directive_name",
|
"type": "directive_name",
|
||||||
"named": true
|
"named": true
|
||||||
|
@ -419,7 +454,19 @@
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "plain_scalar",
|
"type": "float_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null_scalar",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string_scalar",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
56344
src/parser.c
generated
56344
src/parser.c
generated
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,13 @@
|
||||||
#include <tree_sitter/parser.h>
|
#include <tree_sitter/parser.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
// tree-sitter does not support multiple files for external scanner
|
||||||
|
#include "./schema.generated.cc"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
using std::vector;
|
using std::vector;
|
||||||
|
using namespace tree_sitter_yaml;
|
||||||
|
|
||||||
enum TokenType {
|
enum TokenType {
|
||||||
END_OF_FILE,
|
END_OF_FILE,
|
||||||
|
@ -37,10 +41,16 @@ enum TokenType {
|
||||||
R_SQT_STR_CTN, BR_SQT_STR_CTN,
|
R_SQT_STR_CTN, BR_SQT_STR_CTN,
|
||||||
R_SQT_ESC_SQT, BR_SQT_ESC_SQT,
|
R_SQT_ESC_SQT, BR_SQT_ESC_SQT,
|
||||||
R_SQT_STR_END, BR_SQT_STR_END,
|
R_SQT_STR_END, BR_SQT_STR_END,
|
||||||
R_SGL_PLN_BLK, BR_SGL_PLN_BLK, B_SGL_PLN_BLK,
|
|
||||||
R_SGL_PLN_FLW, BR_SGL_PLN_FLW,
|
R_SGL_PLN_NUL_BLK, BR_SGL_PLN_NUL_BLK, B_SGL_PLN_NUL_BLK, R_SGL_PLN_NUL_FLW, BR_SGL_PLN_NUL_FLW,
|
||||||
R_MTL_PLN_BLK, BR_MTL_PLN_BLK,
|
R_SGL_PLN_BOL_BLK, BR_SGL_PLN_BOL_BLK, B_SGL_PLN_BOL_BLK, R_SGL_PLN_BOL_FLW, BR_SGL_PLN_BOL_FLW,
|
||||||
R_MTL_PLN_FLW, BR_MTL_PLN_FLW,
|
R_SGL_PLN_INT_BLK, BR_SGL_PLN_INT_BLK, B_SGL_PLN_INT_BLK, R_SGL_PLN_INT_FLW, BR_SGL_PLN_INT_FLW,
|
||||||
|
R_SGL_PLN_FLT_BLK, BR_SGL_PLN_FLT_BLK, B_SGL_PLN_FLT_BLK, R_SGL_PLN_FLT_FLW, BR_SGL_PLN_FLT_FLW,
|
||||||
|
R_SGL_PLN_STR_BLK, BR_SGL_PLN_STR_BLK, B_SGL_PLN_STR_BLK, R_SGL_PLN_STR_FLW, BR_SGL_PLN_STR_FLW,
|
||||||
|
|
||||||
|
R_MTL_PLN_STR_BLK, BR_MTL_PLN_STR_BLK,
|
||||||
|
R_MTL_PLN_STR_FLW, BR_MTL_PLN_STR_FLW,
|
||||||
|
|
||||||
R_TAG, BR_TAG, B_TAG,
|
R_TAG, BR_TAG, B_TAG,
|
||||||
R_ACR, BR_ACR, B_ACR,
|
R_ACR, BR_ACR, B_ACR,
|
||||||
R_ALS, BR_ALS, B_ALS,
|
R_ALS, BR_ALS, B_ALS,
|
||||||
|
@ -102,6 +112,16 @@ enum TokenType {
|
||||||
blk_imp_tab = has_tab_ind; \
|
blk_imp_tab = has_tab_ind; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
#define UPD_SCH_STT() { \
|
||||||
|
sch_stt = adv_sch_stt(sch_stt, cur_chr, &rlt_sch); \
|
||||||
|
}
|
||||||
|
#define SGL_PLN_SYM(POS, CTX) ( \
|
||||||
|
rlt_sch == RS_NUL ? POS##_SGL_PLN_NUL_##CTX : \
|
||||||
|
rlt_sch == RS_BOL ? POS##_SGL_PLN_BOL_##CTX : \
|
||||||
|
rlt_sch == RS_INT ? POS##_SGL_PLN_INT_##CTX : \
|
||||||
|
rlt_sch == RS_FLT ? POS##_SGL_PLN_FLT_##CTX : \
|
||||||
|
POS##_SGL_PLN_STR_##CTX \
|
||||||
|
)
|
||||||
|
|
||||||
struct Scanner {
|
struct Scanner {
|
||||||
int16_t row;
|
int16_t row;
|
||||||
|
@ -118,6 +138,8 @@ struct Scanner {
|
||||||
int16_t cur_row;
|
int16_t cur_row;
|
||||||
int16_t cur_col;
|
int16_t cur_col;
|
||||||
int32_t cur_chr;
|
int32_t cur_chr;
|
||||||
|
int8_t sch_stt;
|
||||||
|
ResultSchema rlt_sch;
|
||||||
|
|
||||||
Scanner() {
|
Scanner() {
|
||||||
deserialize(NULL, 0);
|
deserialize(NULL, 0);
|
||||||
|
@ -201,6 +223,8 @@ struct Scanner {
|
||||||
cur_row = row;
|
cur_row = row;
|
||||||
cur_col = col;
|
cur_col = col;
|
||||||
cur_chr = 0;
|
cur_chr = 0;
|
||||||
|
sch_stt = 0;
|
||||||
|
rlt_sch = RS_STR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush() {
|
void flush() {
|
||||||
|
@ -590,9 +614,9 @@ struct Scanner {
|
||||||
bool is_lka_saf = (this->*is_plain_safe)(LKA);
|
bool is_lka_saf = (this->*is_plain_safe)(LKA);
|
||||||
if (is_lka_saf || is_lka_wsp) {
|
if (is_lka_saf || is_lka_wsp) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (is_lka_saf && LKA != '#' && LKA != ':') {ADV();MRK_END();}
|
if (is_lka_saf && LKA != '#' && LKA != ':') {ADV();MRK_END();UPD_SCH_STT();}
|
||||||
else if (is_cur_saf && LKA == '#') {ADV();MRK_END();}
|
else if (is_cur_saf && LKA == '#') {ADV();MRK_END();UPD_SCH_STT();}
|
||||||
else if (is_lka_wsp) ADV();
|
else if (is_lka_wsp) {ADV();UPD_SCH_STT();}
|
||||||
else if (LKA == ':') ADV(); // check later
|
else if (LKA == ':') ADV(); // check later
|
||||||
else break;
|
else break;
|
||||||
|
|
||||||
|
@ -602,7 +626,7 @@ struct Scanner {
|
||||||
is_lka_saf = (this->*is_plain_safe)(LKA);
|
is_lka_saf = (this->*is_plain_safe)(LKA);
|
||||||
|
|
||||||
if (cur_chr == ':') {
|
if (cur_chr == ':') {
|
||||||
if (is_lka_saf) MRK_END();
|
if (is_lka_saf) {MRK_END();UPD_SCH_STT();}
|
||||||
else return SCN_FAIL;
|
else return SCN_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -857,10 +881,10 @@ struct Scanner {
|
||||||
if (VLD[BR_BLK_FLD_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_FLD_BGN);
|
if (VLD[BR_BLK_FLD_BGN] && is_br) return scn_blk_str_bgn(lexer, BR_BLK_FLD_BGN);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool maybe_sgl_pln_blk = (VLD[R_SGL_PLN_BLK] && is_r) || (VLD[BR_SGL_PLN_BLK] && is_br) || (VLD[B_SGL_PLN_BLK] && is_b);
|
bool maybe_sgl_pln_blk = (VLD[R_SGL_PLN_STR_BLK] && is_r) || (VLD[BR_SGL_PLN_STR_BLK] && is_br) || (VLD[B_SGL_PLN_STR_BLK] && is_b);
|
||||||
bool maybe_sgl_pln_flw = (VLD[R_SGL_PLN_FLW] && is_r) || (VLD[BR_SGL_PLN_FLW] && is_br);
|
bool maybe_sgl_pln_flw = (VLD[R_SGL_PLN_STR_FLW] && is_r) || (VLD[BR_SGL_PLN_STR_FLW] && is_br);
|
||||||
bool maybe_mtl_pln_blk = (VLD[R_MTL_PLN_BLK] && is_r) || (VLD[BR_MTL_PLN_BLK] && is_br);
|
bool maybe_mtl_pln_blk = (VLD[R_MTL_PLN_STR_BLK] && is_r) || (VLD[BR_MTL_PLN_STR_BLK] && is_br);
|
||||||
bool maybe_mtl_pln_flw = (VLD[R_MTL_PLN_FLW] && is_r) || (VLD[BR_MTL_PLN_FLW] && is_br);
|
bool maybe_mtl_pln_flw = (VLD[R_MTL_PLN_STR_FLW] && is_r) || (VLD[BR_MTL_PLN_STR_FLW] && is_br);
|
||||||
|
|
||||||
if (maybe_sgl_pln_blk || maybe_sgl_pln_flw || maybe_mtl_pln_blk || maybe_mtl_pln_flw) {
|
if (maybe_sgl_pln_blk || maybe_sgl_pln_flw || maybe_mtl_pln_blk || maybe_mtl_pln_flw) {
|
||||||
bool is_in_blk = maybe_sgl_pln_blk || maybe_mtl_pln_blk;
|
bool is_in_blk = maybe_sgl_pln_blk || maybe_mtl_pln_blk;
|
||||||
|
@ -872,6 +896,7 @@ struct Scanner {
|
||||||
|| ((bgn_chr == '-' || bgn_chr == '?' || bgn_chr == ':')
|
|| ((bgn_chr == '-' || bgn_chr == '?' || bgn_chr == ':')
|
||||||
&& (this->*is_plain_safe)(LKA));
|
&& (this->*is_plain_safe)(LKA));
|
||||||
if (!is_plain_first) return false;
|
if (!is_plain_first) return false;
|
||||||
|
UPD_SCH_STT();
|
||||||
} else {
|
} else {
|
||||||
// no need to check the following cases:
|
// no need to check the following cases:
|
||||||
// ..X
|
// ..X
|
||||||
|
@ -879,6 +904,7 @@ struct Scanner {
|
||||||
// --X
|
// --X
|
||||||
// ---X
|
// ---X
|
||||||
// X: lookahead
|
// X: lookahead
|
||||||
|
sch_stt = SCH_STT_FRZ; // must be RS_STR
|
||||||
}
|
}
|
||||||
|
|
||||||
MRK_END();
|
MRK_END();
|
||||||
|
@ -898,11 +924,11 @@ struct Scanner {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end_row == bgn_row) {
|
if (end_row == bgn_row) {
|
||||||
if (maybe_sgl_pln_blk) {MAY_UPD_IMP_COL();RET_SYM(is_r ? R_SGL_PLN_BLK : is_br ? BR_SGL_PLN_BLK : B_SGL_PLN_BLK);}
|
if (maybe_sgl_pln_blk) {MAY_UPD_IMP_COL();RET_SYM(is_r ? SGL_PLN_SYM(R, BLK) : is_br ? SGL_PLN_SYM(BR, BLK) : SGL_PLN_SYM(B, BLK));}
|
||||||
if (maybe_sgl_pln_flw) RET_SYM(is_r ? R_SGL_PLN_FLW : BR_SGL_PLN_FLW);
|
if (maybe_sgl_pln_flw) RET_SYM(is_r ? SGL_PLN_SYM(R, FLW) : SGL_PLN_SYM(BR, FLW));
|
||||||
} else {
|
} else {
|
||||||
if (maybe_mtl_pln_blk) {MAY_UPD_IMP_COL();RET_SYM(is_r ? R_MTL_PLN_BLK : BR_MTL_PLN_BLK);}
|
if (maybe_mtl_pln_blk) {MAY_UPD_IMP_COL();RET_SYM(is_r ? R_MTL_PLN_STR_BLK : BR_MTL_PLN_STR_BLK);}
|
||||||
if (maybe_mtl_pln_flw) RET_SYM(is_r ? R_MTL_PLN_FLW : BR_MTL_PLN_FLW);
|
if (maybe_mtl_pln_flw) RET_SYM(is_r ? R_MTL_PLN_STR_FLW : BR_MTL_PLN_STR_FLW);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
204
src/schema.generated.cc
generated
Normal file
204
src/schema.generated.cc
generated
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace tree_sitter_yaml {
|
||||||
|
|
||||||
|
const int8_t SCH_STT_FRZ = -1;
|
||||||
|
|
||||||
|
enum ResultSchema {
|
||||||
|
RS_STR,
|
||||||
|
RS_INT,
|
||||||
|
RS_NUL,
|
||||||
|
RS_BOL,
|
||||||
|
RS_FLT,
|
||||||
|
};
|
||||||
|
|
||||||
|
int8_t adv_sch_stt(int8_t sch_stt, int32_t cur_chr, ResultSchema *rlt_sch) {
|
||||||
|
switch (sch_stt) {
|
||||||
|
case -1:
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
if (cur_chr == '.') {*rlt_sch = RS_STR; return 6;}
|
||||||
|
if (cur_chr == '0') {*rlt_sch = RS_INT; return 37;}
|
||||||
|
if (cur_chr == 'F') {*rlt_sch = RS_STR; return 2;}
|
||||||
|
if (cur_chr == 'N') {*rlt_sch = RS_STR; return 16;}
|
||||||
|
if (cur_chr == 'T') {*rlt_sch = RS_STR; return 13;}
|
||||||
|
if (cur_chr == 'f') {*rlt_sch = RS_STR; return 17;}
|
||||||
|
if (cur_chr == 'n') {*rlt_sch = RS_STR; return 29;}
|
||||||
|
if (cur_chr == 't') {*rlt_sch = RS_STR; return 26;}
|
||||||
|
if (cur_chr == '~') {*rlt_sch = RS_NUL; return 35;}
|
||||||
|
if (cur_chr == '+' ||
|
||||||
|
cur_chr == '-') {*rlt_sch = RS_STR; return 1;}
|
||||||
|
if (('1' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (cur_chr == '.') {*rlt_sch = RS_STR; return 7;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (cur_chr == 'A') {*rlt_sch = RS_STR; return 9;}
|
||||||
|
if (cur_chr == 'a') {*rlt_sch = RS_STR; return 22;}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (cur_chr == 'A') {*rlt_sch = RS_STR; return 12;}
|
||||||
|
if (cur_chr == 'a') {*rlt_sch = RS_STR; return 12;}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (cur_chr == 'E') {*rlt_sch = RS_BOL; return 36;}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if (cur_chr == 'F') {*rlt_sch = RS_FLT; return 41;}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
|
||||||
|
if (cur_chr == 'N') {*rlt_sch = RS_STR; return 3;}
|
||||||
|
if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
|
||||||
|
if (cur_chr == 'n') {*rlt_sch = RS_STR; return 18;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if (cur_chr == 'I') {*rlt_sch = RS_STR; return 11;}
|
||||||
|
if (cur_chr == 'i') {*rlt_sch = RS_STR; return 24;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
if (cur_chr == 'L') {*rlt_sch = RS_NUL; return 35;}
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
if (cur_chr == 'L') {*rlt_sch = RS_STR; return 14;}
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
if (cur_chr == 'L') {*rlt_sch = RS_STR; return 8;}
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
if (cur_chr == 'N') {*rlt_sch = RS_STR; return 5;}
|
||||||
|
if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
if (cur_chr == 'N') {*rlt_sch = RS_FLT; return 41;}
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
if (cur_chr == 'R') {*rlt_sch = RS_STR; return 15;}
|
||||||
|
if (cur_chr == 'r') {*rlt_sch = RS_STR; return 28;}
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
if (cur_chr == 'S') {*rlt_sch = RS_STR; return 4;}
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
if (cur_chr == 'U') {*rlt_sch = RS_STR; return 4;}
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
if (cur_chr == 'U') {*rlt_sch = RS_STR; return 10;}
|
||||||
|
if (cur_chr == 'u') {*rlt_sch = RS_STR; return 23;}
|
||||||
|
break;
|
||||||
|
case 17:
|
||||||
|
if (cur_chr == 'a') {*rlt_sch = RS_STR; return 22;}
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
if (cur_chr == 'a') {*rlt_sch = RS_STR; return 25;}
|
||||||
|
break;
|
||||||
|
case 19:
|
||||||
|
if (cur_chr == 'e') {*rlt_sch = RS_BOL; return 36;}
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
if (cur_chr == 'f') {*rlt_sch = RS_FLT; return 41;}
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
if (cur_chr == 'l') {*rlt_sch = RS_NUL; return 35;}
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
if (cur_chr == 'l') {*rlt_sch = RS_STR; return 27;}
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
if (cur_chr == 'l') {*rlt_sch = RS_STR; return 21;}
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
if (cur_chr == 'n') {*rlt_sch = RS_STR; return 20;}
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
if (cur_chr == 'n') {*rlt_sch = RS_FLT; return 41;}
|
||||||
|
break;
|
||||||
|
case 26:
|
||||||
|
if (cur_chr == 'r') {*rlt_sch = RS_STR; return 28;}
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
if (cur_chr == 's') {*rlt_sch = RS_STR; return 19;}
|
||||||
|
break;
|
||||||
|
case 28:
|
||||||
|
if (cur_chr == 'u') {*rlt_sch = RS_STR; return 19;}
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
if (cur_chr == 'u') {*rlt_sch = RS_STR; return 23;}
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
if (cur_chr == '+' ||
|
||||||
|
cur_chr == '-') {*rlt_sch = RS_STR; return 32;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
|
||||||
|
break;
|
||||||
|
case 31:
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '7')) {*rlt_sch = RS_INT; return 39;}
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
|
||||||
|
break;
|
||||||
|
case 33:
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9') ||
|
||||||
|
('A' <= cur_chr && cur_chr <= 'F') ||
|
||||||
|
('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
|
||||||
|
break;
|
||||||
|
case 34:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
*rlt_sch = RS_NUL;
|
||||||
|
break;
|
||||||
|
case 36:
|
||||||
|
*rlt_sch = RS_BOL;
|
||||||
|
break;
|
||||||
|
case 37:
|
||||||
|
*rlt_sch = RS_INT;
|
||||||
|
if (cur_chr == '.') {*rlt_sch = RS_FLT; return 42;}
|
||||||
|
if (cur_chr == 'o') {*rlt_sch = RS_STR; return 31;}
|
||||||
|
if (cur_chr == 'x') {*rlt_sch = RS_STR; return 33;}
|
||||||
|
if (cur_chr == 'E' ||
|
||||||
|
cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
|
||||||
|
break;
|
||||||
|
case 38:
|
||||||
|
*rlt_sch = RS_INT;
|
||||||
|
if (cur_chr == '.') {*rlt_sch = RS_FLT; return 42;}
|
||||||
|
if (cur_chr == 'E' ||
|
||||||
|
cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_INT; return 38;}
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
*rlt_sch = RS_INT;
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '7')) {*rlt_sch = RS_INT; return 39;}
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
*rlt_sch = RS_INT;
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9') ||
|
||||||
|
('A' <= cur_chr && cur_chr <= 'F') ||
|
||||||
|
('a' <= cur_chr && cur_chr <= 'f')) {*rlt_sch = RS_INT; return 40;}
|
||||||
|
break;
|
||||||
|
case 41:
|
||||||
|
*rlt_sch = RS_FLT;
|
||||||
|
break;
|
||||||
|
case 42:
|
||||||
|
*rlt_sch = RS_FLT;
|
||||||
|
if (cur_chr == 'E' ||
|
||||||
|
cur_chr == 'e') {*rlt_sch = RS_STR; return 30;}
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 42;}
|
||||||
|
break;
|
||||||
|
case 43:
|
||||||
|
*rlt_sch = RS_FLT;
|
||||||
|
if (('0' <= cur_chr && cur_chr <= '9')) {*rlt_sch = RS_FLT; return 43;}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*rlt_sch = RS_STR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (cur_chr != '\r' && cur_chr != '\n' && cur_chr != ' ' && cur_chr != 0) *rlt_sch = RS_STR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -452,6 +452,11 @@ get-stdin@^4.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||||
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
|
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
|
||||||
|
|
||||||
|
get-stdin@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
|
||||||
|
integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
|
||||||
|
|
||||||
git-raw-commits@2.0.0:
|
git-raw-commits@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
|
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
|
||||||
|
|
Loading…
Reference in a new issue