Fix "#" in front of symbols

pull/70/head
Stephan Seitz 2021-04-16 09:40:20 +07:00
parent 2febacbac7
commit a80e38cb47
5 changed files with 57160 additions and 62282 deletions

@ -21,6 +21,7 @@ const PREC = {
DOTTET_LIT: 3, DOTTET_LIT: 3,
KWD_LIT: 4, KWD_LIT: 4,
SPECIAL: 5, SPECIAL: 5,
META_LIT: 6,
} }
const SYMBOL_HEAD = const SYMBOL_HEAD =
@ -39,7 +40,7 @@ module.exports = grammar(clojure, {
name: 'commonlisp', name: 'commonlisp',
extras: ($, original) => [...original, $.block_comment], extras: ($, original) => [...original, $.block_comment],
conflicts: ($, original) => [...original, [$.for_clause], [$.accumulation_clause], [$.accumulation_clause],], conflicts: ($, original) => [...original, [$.for_clause], [$.accumulation_clause],],
rules: { rules: {
block_comment: _ => token(seq('#|', repeat(choice(/[^|]/, /\|[^#]/)), '|#')), block_comment: _ => token(seq('#|', repeat(choice(/[^|]/, /\|[^#]/)), '|#')),
@ -101,7 +102,7 @@ module.exports = grammar(clojure, {
do_clause: $ => prec.left(seq('do', repeat1(prec.left(seq(repeat($._gap), $._form, repeat($._gap)))))), do_clause: $ => prec.left(seq('do', repeat1(prec.left(seq(repeat($._gap), $._form, repeat($._gap)))))),
while_clause: $ => prec.left(seq(choice('while', 'until'), optional($._gap), $._form)), while_clause: $ => prec.left(seq(choice('while', 'until'), optional($._gap), $._form)),
repeat_clause: $ => prec.left(seq('repeat', optional($._gap), $._form)), repeat_clause: $ => prec.left(seq('repeat', optional($._gap), $._form)),
condition_clause: $ => prec.left(seq(choice('when', 'if', 'unless', 'always', 'thereis', 'never', 'else'), optional($._gap), $._form)), condition_clause: $ => prec.left(choice(seq(choice('when', 'if', 'unless', 'always', 'thereis', 'never'), repeat($._gap), $._form), "else")),
accumulation_clause: $ => seq($.accumulation_verb, optional($._gap), $._form, optional(seq(optional($._gap), 'into', optional($._gap), $._form))), accumulation_clause: $ => seq($.accumulation_verb, optional($._gap), $._form, optional(seq(optional($._gap), 'into', optional($._gap), $._form))),
termination_clause: $ => prec.left(seq(choice('finally', 'return', 'initially'), optional($._gap), $._form)), termination_clause: $ => prec.left(seq(choice('finally', 'return', 'initially'), optional($._gap), $._form)),
@ -145,14 +146,15 @@ module.exports = grammar(clojure, {
array_dimension: $ => seq($.num_lit, choice('A', 'a')), array_dimension: $ => seq($.num_lit, choice('A', 'a')),
char_lit: (_, original) => char_lit: (_, original) =>
seq(optional('#'), original), seq(original),
num_lit: (_, original) => num_lit: (_, original) =>
prec(PREC.NUM_LIT, original), prec(PREC.NUM_LIT, original),
_bare_vec_lit: $ => _bare_vec_lit: $ =>
choice(seq(field('open', choice('#0A', '#0a')), $.num_lit), prec(PREC.SPECIAL, choice(seq(field('open', choice('#0A', '#0a')), $.num_lit),
seq(field('open', '#'), optional(field('dimension_indicator', $.array_dimension)), $.list_lit)), seq(field('open', '#'), optional(field('dimension_indicator', $.array_dimension)), $.list_lit))),
_bare_list_lit: $ => _bare_list_lit: $ =>
choice(prec(PREC.SPECIAL, $.defun), choice(prec(PREC.SPECIAL, $.defun),
@ -170,16 +172,15 @@ module.exports = grammar(clojure, {
)), )),
kwd_lit: $ => prec(PREC.KWD_LIT, seq( kwd_lit: $ => prec(PREC.KWD_LIT, seq(
optional('#'),
choice(':', '::'), choice(':', '::'),
$.sym_lit, $.sym_lit,
)), )),
sym_lit: $ => sym_lit: _ =>
seq(repeat($._metadata_lit), seq(SYMBOL),
SYMBOL),
_form: $ => _form: $ =>
seq(optional('#'),
choice(// atom-ish choice(// atom-ish
$.num_lit, $.num_lit,
$.fancy_literal, $.fancy_literal,
@ -216,7 +217,7 @@ module.exports = grammar(clojure, {
$.complex_num_lit, $.complex_num_lit,
".", ".",
//seq($._gap, '.'), //seq($._gap, '.'),
), )),
include_reader_macro: $ => include_reader_macro: $ =>
seq(repeat($._metadata_lit), seq(repeat($._metadata_lit),

@ -80,103 +80,120 @@
] ]
}, },
"_form": { "_form": {
"type": "CHOICE", "type": "SEQ",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "CHOICE",
"name": "num_lit" "members": [
}, {
{ "type": "STRING",
"type": "SYMBOL", "value": "#"
"name": "fancy_literal" },
}, {
{ "type": "BLANK"
"type": "SYMBOL", }
"name": "kwd_lit" ]
},
{
"type": "SYMBOL",
"name": "str_lit"
},
{
"type": "SYMBOL",
"name": "char_lit"
},
{
"type": "SYMBOL",
"name": "nil_lit"
},
{
"type": "SYMBOL",
"name": "package_lit"
},
{
"type": "SYMBOL",
"name": "sym_lit"
},
{
"type": "SYMBOL",
"name": "list_lit"
},
{
"type": "SYMBOL",
"name": "vec_lit"
},
{
"type": "SYMBOL",
"name": "set_lit"
},
{
"type": "SYMBOL",
"name": "read_cond_lit"
},
{
"type": "SYMBOL",
"name": "splicing_read_cond_lit"
},
{
"type": "SYMBOL",
"name": "var_quoting_lit"
},
{
"type": "SYMBOL",
"name": "sym_val_lit"
},
{
"type": "SYMBOL",
"name": "evaling_lit"
},
{
"type": "SYMBOL",
"name": "derefing_lit"
},
{
"type": "SYMBOL",
"name": "quoting_lit"
},
{
"type": "SYMBOL",
"name": "syn_quoting_lit"
},
{
"type": "SYMBOL",
"name": "unquote_splicing_lit"
},
{
"type": "SYMBOL",
"name": "unquoting_lit"
},
{
"type": "SYMBOL",
"name": "include_reader_macro"
},
{
"type": "SYMBOL",
"name": "complex_num_lit"
}, },
{ {
"type": "STRING", "type": "CHOICE",
"value": "." "members": [
{
"type": "SYMBOL",
"name": "num_lit"
},
{
"type": "SYMBOL",
"name": "fancy_literal"
},
{
"type": "SYMBOL",
"name": "kwd_lit"
},
{
"type": "SYMBOL",
"name": "str_lit"
},
{
"type": "SYMBOL",
"name": "char_lit"
},
{
"type": "SYMBOL",
"name": "nil_lit"
},
{
"type": "SYMBOL",
"name": "package_lit"
},
{
"type": "SYMBOL",
"name": "sym_lit"
},
{
"type": "SYMBOL",
"name": "list_lit"
},
{
"type": "SYMBOL",
"name": "vec_lit"
},
{
"type": "SYMBOL",
"name": "set_lit"
},
{
"type": "SYMBOL",
"name": "read_cond_lit"
},
{
"type": "SYMBOL",
"name": "splicing_read_cond_lit"
},
{
"type": "SYMBOL",
"name": "var_quoting_lit"
},
{
"type": "SYMBOL",
"name": "sym_val_lit"
},
{
"type": "SYMBOL",
"name": "evaling_lit"
},
{
"type": "SYMBOL",
"name": "derefing_lit"
},
{
"type": "SYMBOL",
"name": "quoting_lit"
},
{
"type": "SYMBOL",
"name": "syn_quoting_lit"
},
{
"type": "SYMBOL",
"name": "unquote_splicing_lit"
},
{
"type": "SYMBOL",
"name": "unquoting_lit"
},
{
"type": "SYMBOL",
"name": "include_reader_macro"
},
{
"type": "SYMBOL",
"name": "complex_num_lit"
},
{
"type": "STRING",
"value": "."
}
]
} }
] ]
}, },
@ -433,18 +450,6 @@
"content": { "content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "BLANK"
}
]
},
{ {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
@ -514,18 +519,6 @@
"char_lit": { "char_lit": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "BLANK"
}
]
},
{ {
"type": "TOKEN", "type": "TOKEN",
"content": { "content": {
@ -682,13 +675,6 @@
"sym_lit": { "sym_lit": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_metadata_lit"
}
},
{ {
"type": "TOKEN", "type": "TOKEN",
"content": { "content": {
@ -1010,68 +996,72 @@
] ]
}, },
"_bare_vec_lit": { "_bare_vec_lit": {
"type": "CHOICE", "type": "PREC",
"members": [ "value": 5,
{ "content": {
"type": "SEQ", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "FIELD", "type": "SEQ",
"name": "open", "members": [
"content": { {
"type": "FIELD",
"name": "open",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#0A"
},
{
"type": "STRING",
"value": "#0a"
}
]
}
},
{
"type": "SYMBOL",
"name": "num_lit"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "open",
"content": {
"type": "STRING",
"value": "#"
}
},
{
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "STRING", "type": "FIELD",
"value": "#0A" "name": "dimension_indicator",
"content": {
"type": "SYMBOL",
"name": "array_dimension"
}
}, },
{ {
"type": "STRING", "type": "BLANK"
"value": "#0a"
} }
] ]
},
{
"type": "SYMBOL",
"name": "list_lit"
} }
}, ]
{ }
"type": "SYMBOL", ]
"name": "num_lit" }
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "open",
"content": {
"type": "STRING",
"value": "#"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "dimension_indicator",
"content": {
"type": "SYMBOL",
"name": "array_dimension"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "list_lit"
}
]
}
]
}, },
"set_lit": { "set_lit": {
"type": "SEQ", "type": "SEQ",
@ -2106,52 +2096,56 @@
"type": "PREC_LEFT", "type": "PREC_LEFT",
"value": 0, "value": 0,
"content": { "content": {
"type": "SEQ", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "CHOICE", "type": "SEQ",
"members": [ "members": [
{ {
"type": "STRING", "type": "CHOICE",
"value": "when" "members": [
}, {
{ "type": "STRING",
"type": "STRING", "value": "when"
"value": "if" },
}, {
{ "type": "STRING",
"type": "STRING", "value": "if"
"value": "unless" },
}, {
{ "type": "STRING",
"type": "STRING", "value": "unless"
"value": "always" },
{
"type": "STRING",
"value": "always"
},
{
"type": "STRING",
"value": "thereis"
},
{
"type": "STRING",
"value": "never"
}
]
}, },
{ {
"type": "STRING", "type": "REPEAT",
"value": "thereis" "content": {
"type": "SYMBOL",
"name": "_gap"
}
}, },
{
"type": "STRING",
"value": "never"
}
]
},
{
"type": "CHOICE",
"members": [
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_gap" "name": "_form"
},
{
"type": "BLANK"
} }
] ]
}, },
{ {
"type": "SYMBOL", "type": "STRING",
"name": "_form" "value": "else"
} }
] ]
} }
@ -2721,9 +2715,6 @@
[ [
"for_clause" "for_clause"
], ],
[
"accumulation_clause"
],
[ [
"accumulation_clause" "accumulation_clause"
] ]

@ -352,6 +352,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -475,9 +479,13 @@
"named": true, "named": true,
"fields": { "fields": {
"function_name": { "function_name": {
"multiple": false, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -670,9 +678,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -802,9 +814,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -1103,9 +1119,13 @@
"named": true, "named": true,
"fields": { "fields": {
"variable": { "variable": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -1326,9 +1346,13 @@
"named": true, "named": true,
"fields": { "fields": {
"condition": { "condition": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -1462,9 +1486,13 @@
] ]
}, },
"target": { "target": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -1642,6 +1670,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -1903,6 +1935,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -2195,9 +2231,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -2370,6 +2410,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -2661,6 +2705,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -2944,6 +2992,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -3074,42 +3126,7 @@
{ {
"type": "sym_lit", "type": "sym_lit",
"named": true, "named": true,
"fields": { "fields": {}
"meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "meta_lit",
"named": true
}
]
},
"old_meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "old_meta_lit",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "comment",
"named": true
},
{
"type": "dis_expr",
"named": true
}
]
}
}, },
{ {
"type": "sym_val_lit", "type": "sym_val_lit",
@ -3337,9 +3354,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -3469,9 +3490,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -3621,9 +3646,13 @@
] ]
}, },
"value": { "value": {
"multiple": false, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "#",
"named": false
},
{ {
"type": ".", "type": ".",
"named": false "named": false
@ -4224,6 +4253,10 @@
"type": "downto", "type": "downto",
"named": false "named": false
}, },
{
"type": "else",
"named": false
},
{ {
"type": "fancy_literal", "type": "fancy_literal",
"named": true "named": true

File diff suppressed because it is too large Load Diff

@ -612,6 +612,49 @@ foo. bar
(sym_lit) (sym_lit)
(sym_lit) (sym_lit)
(sym_lit) (sym_lit)
(char_lit
(MISSING "char_lit_token1"))
(sym_lit)) (sym_lit))
================================================================================
Loop (else)
================================================================================
(loop for input-index from 0
for input-constraint across (transformation-input-mask transformation)
if (not input-constraint)
collect (transformation-input-symbol input-index)
else
collect input-constraint)
--------------------------------------------------------------------------------
(source
(list_lit
(loop_macro
(loop_clause
(for_clause
(sym_lit)
(for_clause_word)
(num_lit)))
(loop_clause
(for_clause
(sym_lit)
(for_clause_word)
(list_lit
(sym_lit)
(sym_lit))))
(loop_clause
(condition_clause
(list_lit
(sym_lit)
(sym_lit))))
(loop_clause
(accumulation_clause
(accumulation_verb)
(list_lit
(sym_lit)
(sym_lit))))
(loop_clause
(condition_clause))
(loop_clause
(accumulation_clause
(accumulation_verb)
(sym_lit))))))