Fix repeat clause and allow # before char_lit

pull/70/head
Stephan Seitz 2021-04-15 21:10:13 +07:00
parent 14913f6702
commit f328310b1e
5 changed files with 78552 additions and 82772 deletions

@ -23,7 +23,7 @@ const PREC = {
}
const SYMBOL_HEAD =
/[^:.\f\n\r\t ()\[\]{}"@~^;`\\,#'0-9\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
/[^:.\f\n\r\t ()\[\]{}"@^;`\\,#'0-9\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
const SYMBOL_BODY =
choice(SYMBOL_HEAD,
@ -97,7 +97,7 @@ module.exports = grammar(clojure, {
with_clause: $ => prec.left(seq('with', optional($._gap), $._form, optional($._gap), "=", optional($._gap), $._form)),
do_clause: $ => prec.left(seq('do', repeat1(prec.left(seq(repeat($._gap), $._form, repeat($._gap)))))),
while_clause: $ => prec.left(seq('while', optional($._gap), $._form)),
while_clause: $ => prec.left(seq(choice('while', 'until'), optional($._gap), $._form)),
repeat_clause: $ => prec.left(seq('repeat', optional($._gap), $._form)),
condition_clause: $ => prec.left(seq(choice('when', 'if', 'unless', 'always', 'thereis', 'never'), optional($._gap), $._form)),
accumulation_clause: $ => seq($.accumulation_verb, optional($._gap), $._form, optional(seq(optional($._gap), 'into', optional($._gap), $._form))),
@ -110,6 +110,7 @@ module.exports = grammar(clojure, {
$.do_clause,
$.list_lit,
$.while_clause,
$.repeat_clause,
$.accumulation_clause,
$.condition_clause,
$.with_clause,
@ -131,7 +132,7 @@ module.exports = grammar(clojure, {
seq(field('keyword', $.defun_keyword),
repeat($._gap),
field('function_name', $._form),
optional(field('specifier', seq(repeat($._gap),$.kwd_lit))),
optional(field('specifier', seq(repeat($._gap), $.kwd_lit))),
repeat($._gap),
field('lambda_list', $.list_lit)),
seq(field('keyword', alias('lambda', $.defun_keyword)),
@ -139,10 +140,13 @@ module.exports = grammar(clojure, {
field('lambda_list', $.list_lit))
),
array_dimension: $ => seq($.num_lit, 'A'),
array_dimension: $ => seq($.num_lit, choice('A', 'a')),
char_lit: (_, original) =>
seq(optional('#'), original),
_bare_vec_lit: $ =>
choice(seq(field('open', '#0A'), $.num_lit),
choice(seq(field('open', choice('#0A', '#0a')), $.num_lit),
seq(field('open', '#'), optional(field('dimension_indicator', $.array_dimension)), $.list_lit)),
_bare_list_lit: $ =>
@ -218,7 +222,7 @@ module.exports = grammar(clojure, {
complex_num_lit: $ =>
seq(repeat($._metadata_lit),
field('marker', "#C"),
field('marker', choice("#C", "#c")),
repeat($._gap),
'(',
repeat($._gap),

@ -526,6 +526,21 @@
}
},
"char_lit": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "BLANK"
}
]
},
{
"type": "TOKEN",
"content": {
"type": "SEQ",
@ -652,6 +667,8 @@
}
]
}
}
]
},
"nil_lit": {
"type": "TOKEN",
@ -693,7 +710,7 @@
"members": [
{
"type": "PATTERN",
"value": "[^:.\\f\\n\\r\\t ()\\[\\]{}\"@~^;`\\\\,#'0-9\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
"value": "[^:.\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'0-9\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
},
{
"type": "REPEAT",
@ -702,7 +719,7 @@
"members": [
{
"type": "PATTERN",
"value": "[^:.\\f\\n\\r\\t ()\\[\\]{}\"@~^;`\\\\,#'0-9\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
"value": "[^:.\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'0-9\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
},
{
"type": "PATTERN",
@ -1016,8 +1033,17 @@
"type": "FIELD",
"name": "open",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#0A"
},
{
"type": "STRING",
"value": "#0a"
}
]
}
},
{
@ -2024,11 +2050,20 @@
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "while"
},
{
"type": "STRING",
"value": "until"
}
]
},
{
"type": "CHOICE",
"members": [
@ -2265,6 +2300,10 @@
"type": "SYMBOL",
"name": "while_clause"
},
{
"type": "SYMBOL",
"name": "repeat_clause"
},
{
"type": "SYMBOL",
"name": "accumulation_clause"
@ -2488,9 +2527,18 @@
"type": "SYMBOL",
"name": "num_lit"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "A"
},
{
"type": "STRING",
"value": "a"
}
]
}
]
},
@ -2652,8 +2700,17 @@
"type": "FIELD",
"name": "marker",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#C"
},
{
"type": "STRING",
"value": "#c"
}
]
}
},
{

@ -134,6 +134,11 @@
"named": true,
"fields": {}
},
{
"type": "char_lit",
"named": true,
"fields": {}
},
{
"type": "complex_num_lit",
"named": true,
@ -155,6 +160,10 @@
{
"type": "#C",
"named": false
},
{
"type": "#c",
"named": false
}
]
},
@ -1866,6 +1875,10 @@
"type": "list_lit",
"named": true
},
{
"type": "repeat_clause",
"named": true
},
{
"type": "termination_clause",
"named": true
@ -2589,6 +2602,117 @@
]
}
},
{
"type": "repeat_clause",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "char_lit",
"named": true
},
{
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
},
{
"type": "dis_expr",
"named": true
},
{
"type": "evaling_lit",
"named": true
},
{
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
},
{
"type": "list_lit",
"named": true
},
{
"type": "nil_lit",
"named": true
},
{
"type": "num_lit",
"named": true
},
{
"type": "package_lit",
"named": true
},
{
"type": "quoting_lit",
"named": true
},
{
"type": "read_cond_lit",
"named": true
},
{
"type": "set_lit",
"named": true
},
{
"type": "splicing_read_cond_lit",
"named": true
},
{
"type": "str_lit",
"named": true
},
{
"type": "sym_lit",
"named": true
},
{
"type": "sym_val_lit",
"named": true
},
{
"type": "syn_quoting_lit",
"named": true
},
{
"type": "unquote_splicing_lit",
"named": true
},
{
"type": "unquoting_lit",
"named": true
},
{
"type": "var_quoting_lit",
"named": true
},
{
"type": "vec_lit",
"named": true
}
]
}
},
{
"type": "set_lit",
"named": true,
@ -3809,6 +3933,10 @@
{
"type": "#0A",
"named": false
},
{
"type": "#0a",
"named": false
}
]
}
@ -4082,6 +4210,10 @@
"type": "#0A",
"named": false
},
{
"type": "#0a",
"named": false
},
{
"type": "#=",
"named": false
@ -4106,6 +4238,10 @@
"type": "#_",
"named": false
},
{
"type": "#c",
"named": false
},
{
"type": "'",
"named": false
@ -4158,6 +4294,10 @@
"type": "`",
"named": false
},
{
"type": "a",
"named": false
},
{
"type": "accumulation_verb",
"named": true
@ -4194,10 +4334,6 @@
"type": "by",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "cl:loop",
"named": false
@ -4310,6 +4446,10 @@
"type": "unless",
"named": false
},
{
"type": "until",
"named": false
},
{
"type": "upto",
"named": false

File diff suppressed because it is too large Load Diff

@ -577,3 +577,42 @@ Functions with numbers (TODO!!!)
(sym_lit)
(num_lit)
(sym_lit))
================================================================================
Petalisp shapes
================================================================================
(~ (* w h) ~ 128)
--------------------------------------------------------------------------------
(source
(list_lit
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)
(sym_lit))
(sym_lit)
(num_lit)))
================================================================================
Chars
================================================================================
#\?
--------------------------------------------------------------------------------
(source
(char_lit))
================================================================================
Dotted literals
================================================================================
foo.bar
foo. bar
.bar
#.bar
--------------------------------------------------------------------------------