Allow free forms in loop macro

pull/70/head
Stephan Seitz 2021-04-04 15:02:54 +07:00
parent 75161e7a7e
commit 920864eda9
5 changed files with 72001 additions and 31711 deletions

@ -34,7 +34,7 @@ module.exports = grammar(clojure, {
name: 'commonlisp',
extras: ($, original) => [...original, $.block_comment],
conflicts: ($, original) => [...original, [$.for_clause], [$.accumulation_clause], [$.do_clause]],
conflicts: ($, original) => [...original, [$.for_clause], [$.accumulation_clause]],
rules: {
block_comment: _ => token(seq('#|', repeat(choice(/[^|]/, /\|[^#]/)), '|#')),
@ -67,8 +67,24 @@ module.exports = grammar(clojure, {
repeat(choice(field('value', $._form), $._gap)),
field('close', ")")),
_for_part: $ => seq(optional($._gap), choice('in', 'across', 'being', 'using', /being the (hash-key[s]?|hash-value[s]?) in/, 'below', 'from', 'to', 'upto', 'downto', 'downfrom', 'on', 'by', 'then', '='),
optional($._gap), $._form),
for_clause_word: _ => choice('in',
'across',
'being',
'using',
/being the (hash-key[s]?|hash-value[s]?) in/,
'below',
'from',
'to',
'upto',
'downto',
'downfrom',
'on',
'by',
'then',
'='),
_for_part: $ => seq(optional($._gap), $.for_clause_word, optional($._gap), $._form),
accumulation_verb: _ => /((collect|append|nconc|count|maximize|minimize)(ing)?|sum(ming)?)/,
@ -76,7 +92,7 @@ module.exports = grammar(clojure, {
repeat1($._for_part)),
with_clause: $ => prec.left(seq('with', optional($._gap), $._form, optional($._gap), "=", optional($._gap), $._form)),
do_clause: $ => prec.left(seq('do', repeat(seq(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)),
repeat_clause: $ => prec.left(seq('repeat', optional($._gap), $._form)),
condition_clause: $ => prec.left(seq(choice('when', 'if', 'unless', 'always', 'thereis', 'never'), optional($._gap), $._form)),
@ -88,6 +104,7 @@ module.exports = grammar(clojure, {
seq(choice(
$.for_clause,
$.do_clause,
$.list_lit,
$.while_clause,
$.accumulation_clause,
$.condition_clause,
@ -162,11 +179,35 @@ module.exports = grammar(clojure, {
$.quoting_lit,
$.syn_quoting_lit,
$.unquote_splicing_lit,
$.unquoting_lit),
$.unquoting_lit,
$.include_reader_macro,
$.complex_num_lit,
'.',
),
sym_lit: $ =>
seq(repeat($._metadata_lit),
SYMBOL),
include_reader_macro: $ =>
seq(repeat($._metadata_lit),
field('marker', choice("#+", "#-")),
repeat($._gap),
field('condition', $._form),
repeat($._gap),
field('target', $._form)),
complex_num_lit: $ =>
seq(repeat($._metadata_lit),
field('marker', "#C"),
repeat($._gap),
'(',
repeat($._gap),
field('real', $.num_lit), // only numbers allowed here
repeat($._gap),
field('imaginary', $.num_lit),
repeat($._gap),
')'
),
}
});

@ -161,6 +161,18 @@
{
"type": "SYMBOL",
"name": "unquoting_lit"
},
{
"type": "SYMBOL",
"name": "include_reader_macro"
},
{
"type": "SYMBOL",
"name": "complex_num_lit"
},
{
"type": "STRING",
"value": "."
}
]
},
@ -1776,6 +1788,71 @@
}
]
},
"for_clause_word": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "in"
},
{
"type": "STRING",
"value": "across"
},
{
"type": "STRING",
"value": "being"
},
{
"type": "STRING",
"value": "using"
},
{
"type": "PATTERN",
"value": "being the (hash-key[s]?|hash-value[s]?) in"
},
{
"type": "STRING",
"value": "below"
},
{
"type": "STRING",
"value": "from"
},
{
"type": "STRING",
"value": "to"
},
{
"type": "STRING",
"value": "upto"
},
{
"type": "STRING",
"value": "downto"
},
{
"type": "STRING",
"value": "downfrom"
},
{
"type": "STRING",
"value": "on"
},
{
"type": "STRING",
"value": "by"
},
{
"type": "STRING",
"value": "then"
},
{
"type": "STRING",
"value": "="
}
]
},
"_for_part": {
"type": "SEQ",
"members": [
@ -1792,69 +1869,8 @@
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "in"
},
{
"type": "STRING",
"value": "across"
},
{
"type": "STRING",
"value": "being"
},
{
"type": "STRING",
"value": "using"
},
{
"type": "PATTERN",
"value": "being the (hash-key[s]?|hash-value[s]?) in"
},
{
"type": "STRING",
"value": "below"
},
{
"type": "STRING",
"value": "from"
},
{
"type": "STRING",
"value": "to"
},
{
"type": "STRING",
"value": "upto"
},
{
"type": "STRING",
"value": "downto"
},
{
"type": "STRING",
"value": "downfrom"
},
{
"type": "STRING",
"value": "on"
},
{
"type": "STRING",
"value": "by"
},
{
"type": "STRING",
"value": "then"
},
{
"type": "STRING",
"value": "="
}
]
"type": "SYMBOL",
"name": "for_clause_word"
},
{
"type": "CHOICE",
@ -1999,27 +2015,33 @@
"value": "do"
},
{
"type": "REPEAT",
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_form"
}
]
},
{
"type": "SYMBOL",
"name": "_form"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
}
]
}
}
}
]
@ -2263,6 +2285,10 @@
"type": "SYMBOL",
"name": "do_clause"
},
{
"type": "SYMBOL",
"name": "list_lit"
},
{
"type": "SYMBOL",
"name": "while_clause"
@ -2470,6 +2496,137 @@
"value": "A"
}
]
},
"include_reader_macro": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_metadata_lit"
}
},
{
"type": "FIELD",
"name": "marker",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#+"
},
{
"type": "STRING",
"value": "#-"
}
]
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_form"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "FIELD",
"name": "target",
"content": {
"type": "SYMBOL",
"name": "_form"
}
}
]
},
"complex_num_lit": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_metadata_lit"
}
},
{
"type": "FIELD",
"name": "marker",
"content": {
"type": "STRING",
"value": "#C"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "FIELD",
"name": "real",
"content": {
"type": "SYMBOL",
"name": "num_lit"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "FIELD",
"name": "imaginary",
"content": {
"type": "SYMBOL",
"name": "num_lit"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_gap"
}
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"extras": [
@ -2484,9 +2641,6 @@
],
[
"accumulation_clause"
],
[
"do_clause"
]
],
"precedences": [],

@ -19,6 +19,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -35,6 +39,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -117,13 +125,83 @@
]
}
},
{
"type": "complex_num_lit",
"named": true,
"fields": {
"imaginary": {
"multiple": false,
"required": true,
"types": [
{
"type": "num_lit",
"named": true
}
]
},
"marker": {
"multiple": false,
"required": true,
"types": [
{
"type": "#C",
"named": false
}
]
},
"meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "meta_lit",
"named": true
}
]
},
"old_meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "old_meta_lit",
"named": true
}
]
},
"real": {
"multiple": false,
"required": true,
"types": [
{
"type": "num_lit",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "comment",
"named": true
},
{
"type": "dis_expr",
"named": true
}
]
}
},
{
"type": "condition_clause",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "char_lit",
@ -133,6 +211,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -149,6 +231,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -244,10 +330,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -260,6 +354,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -354,10 +452,18 @@
"multiple": false,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -370,6 +476,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -515,10 +625,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -531,6 +649,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -631,10 +753,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -647,6 +777,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -745,6 +879,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -761,6 +899,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -904,10 +1046,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -920,6 +1070,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -999,6 +1153,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1015,6 +1173,14 @@
"type": "fancy_literal",
"named": true
},
{
"type": "for_clause_word",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -1082,6 +1248,261 @@
]
}
},
{
"type": "for_clause_word",
"named": true,
"fields": {}
},
{
"type": "include_reader_macro",
"named": true,
"fields": {
"condition": {
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"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": "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
}
]
},
"marker": {
"multiple": false,
"required": true,
"types": [
{
"type": "#+",
"named": false
},
{
"type": "#-",
"named": false
}
]
},
"meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "meta_lit",
"named": true
}
]
},
"old_meta": {
"multiple": true,
"required": false,
"types": [
{
"type": "old_meta_lit",
"named": true
}
]
},
"target": {
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"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": "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
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "comment",
"named": true
},
{
"type": "dis_expr",
"named": true
}
]
}
},
{
"type": "list_lit",
"named": true,
@ -1130,10 +1551,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1146,6 +1575,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -1260,6 +1693,10 @@
"type": "for_clause",
"named": true
},
{
"type": "list_lit",
"named": true
},
{
"type": "termination_clause",
"named": true
@ -1367,10 +1804,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1383,6 +1828,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -1615,10 +2064,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1631,6 +2088,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -1771,10 +2232,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1787,6 +2256,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -1935,10 +2408,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -1951,6 +2432,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2049,6 +2534,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2065,6 +2554,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2190,10 +2683,18 @@
"multiple": true,
"required": false,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2206,6 +2707,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2427,7 +2932,7 @@
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "char_lit",
@ -2437,6 +2942,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2453,6 +2962,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2558,10 +3071,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2574,6 +3095,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2674,10 +3199,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2690,6 +3223,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2810,10 +3347,18 @@
"multiple": false,
"required": true,
"types": [
{
"type": ".",
"named": false
},
{
"type": "char_lit",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -2826,6 +3371,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -2986,7 +3535,7 @@
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "char_lit",
@ -2996,6 +3545,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -3012,6 +3565,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -3085,7 +3642,7 @@
"fields": {},
"children": {
"multiple": true,
"required": true,
"required": false,
"types": [
{
"type": "char_lit",
@ -3095,6 +3652,10 @@
"type": "comment",
"named": true
},
{
"type": "complex_num_lit",
"named": true
},
{
"type": "derefing_lit",
"named": true
@ -3111,6 +3672,10 @@
"type": "fancy_literal",
"named": true
},
{
"type": "include_reader_macro",
"named": true
},
{
"type": "kwd_lit",
"named": true
@ -3190,6 +3755,14 @@
"type": "#'",
"named": false
},
{
"type": "#+",
"named": false
},
{
"type": "#-",
"named": false
},
{
"type": "#0A",
"named": false
@ -3206,6 +3779,10 @@
"type": "#?@",
"named": false
},
{
"type": "#C",
"named": false
},
{
"type": "#^",
"named": false
@ -3234,6 +3811,10 @@
"type": ",@",
"named": false
},
{
"type": ".",
"named": false
},
{
"type": "=",
"named": false

File diff suppressed because it is too large Load Diff

@ -98,7 +98,7 @@ Loop Macro
(y '(+ thread-idx-y (* block-idx-y block-dim-y)))
(z '(+ thread-idx-z (* block-idx-z block-dim-z)))))))))
---
(source (list_lit (loop_macro (loop_clause (for_clause (sym_lit) (sym_lit))) (loop_clause (for_clause (sym_lit) (list_lit (sym_lit) (quoting_lit (sym_lit)) (quoting_lit (sym_lit)) (quoting_lit (sym_lit))))) (loop_clause (accumulation_clause (accumulation_verb) (list_lit (sym_lit) (list_lit (list_lit (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit)))) (syn_quoting_lit (list_lit (unquoting_lit (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (unquoting_lit (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (unquoting_lit (list_lit (sym_lit) (sym_lit))) (unquoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (quoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit))))) (list_lit (sym_lit) (quoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit))))) (list_lit
(source (list_lit (loop_macro (loop_clause (for_clause (sym_lit) (for_clause_word) (sym_lit))) (loop_clause (for_clause (sym_lit) (for_clause_word) (list_lit (sym_lit) (quoting_lit (sym_lit)) (quoting_lit (sym_lit)) (quoting_lit (sym_lit))))) (loop_clause (accumulation_clause (accumulation_verb) (list_lit (sym_lit) (list_lit (list_lit (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit)))) (syn_quoting_lit (list_lit (unquoting_lit (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (unquoting_lit (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (unquoting_lit (list_lit (sym_lit) (sym_lit))) (unquoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (quoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit))))) (list_lit (sym_lit) (quoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit))))) (list_lit
(sym_lit) (quoting_lit (list_lit (sym_lit) (sym_lit) (list_lit (sym_lit) (sym_lit) (sym_lit)))))))))))))))))
==========================================
@ -108,8 +108,83 @@ Loop Macro (Accumulation)
(loop for i below 10
collect x into a)
---
(source (list_lit (loop_macro (loop_clause (for_clause (sym_lit) (num_lit))) (loop_clause (accumulation_clause (accumulation_verb) (sym_lit) (sym_lit))))))
(source (list_lit (loop_macro (loop_clause (for_clause (sym_lit) (for_clause_word) (num_lit))) (loop_clause (accumulation_clause (accumulation_verb) (sym_lit) (sym_lit))))))
==========================================
Loop Macro (finally)
==========================================
(loop for a below 8
for x = (+ a)
with first-x = (+ a)
if (> x 10) return x
do (format t "~A ~A~%" x first-x)
finally (return 3))
---
(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 (with_clause (sym_lit) (list_lit (sym_lit) (sym_lit))))
(loop_clause (condition_clause (list_lit (sym_lit) (sym_lit) (num_lit))))
(loop_clause (termination_clause (sym_lit)))
(loop_clause (do_clause (list_lit (sym_lit) (sym_lit) (str_lit) (sym_lit) (sym_lit))))
(loop_clause (termination_clause (list_lit (sym_lit) (num_lit)))))))
==========================================
Loop Macro (do do do)
==========================================
(loop for a below 8
for x = (+ a)
with first-x = (+ a)
if (> x 10) return x
do (format t "~A ~A~%" x first-x) (format t "~A ~A~%" x first-x)
finally (return 3))
---
(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 (with_clause (sym_lit) (list_lit (sym_lit) (sym_lit))))
(loop_clause (condition_clause (list_lit (sym_lit) (sym_lit) (num_lit))))
(loop_clause (termination_clause (sym_lit)))
(loop_clause (do_clause (list_lit (sym_lit) (sym_lit) (str_lit) (sym_lit) (sym_lit))))
(loop_clause (list_lit (sym_lit) (sym_lit) (str_lit) (sym_lit) (sym_lit)))
(loop_clause (termination_clause (list_lit (sym_lit) (num_lit)))))))
==========================================
Conses
==========================================
(2 . 3)
(2 . ( 2 3))
---
(source (list_lit (num_lit) (num_lit)) (list_lit (num_lit) (list_lit (num_lit) (num_lit))))
==========================================
Complex Numbers
==========================================
#C(2 3)
#C
( 2 1)
#C(-2 1)
---
(source
(complex_num_lit (num_lit) (num_lit))
(complex_num_lit (num_lit) (num_lit))
(complex_num_lit (num_lit) (num_lit)))
==========================================
Reader Macros
==========================================
#+unix(loop)
#+windows
(loop)
---
(source (include_reader_macro (sym_lit) (list_lit (loop_macro))) (include_reader_macro (sym_lit) (list_lit (loop_macro))))
==========================================
Decimals