Add support for packages

pull/70/head
Stephan Seitz 2021-04-15 16:07:53 +07:00
parent d4f054a358
commit 12d3a31cbf
5 changed files with 48544 additions and 42994 deletions

@ -16,15 +16,18 @@ const WHITESPACE =
const PREC = {
NORMAL: 1,
SPECIAL: 2,
PACKAGE_LIT: 2,
DOTTET_LIT: 3,
SPECIAL: 4,
}
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,
/[#':0-9]/);
/[#'0-9]/);
const SYMBOL =
token(seq(SYMBOL_HEAD,
repeat(SYMBOL_BODY)));
@ -147,16 +150,34 @@ module.exports = grammar(clojure, {
repeat(choice(field('value', $._form), $._gap)),
field('close', ")"))),
dotted_sym_lit: $ => prec.left(PREC.DOTTET_LIT, seq($.sym_lit, repeat1(seq(".", $.sym_lit)))),
package_lit: $ => prec(PREC.PACKAGE_LIT, seq(
optional(field('package', choice($.dotted_sym_lit, $.sym_lit))),
choice(':', '::'),
field('symbol', choice($.dotted_sym_lit, $.sym_lit))
)),
//kwd_lit: $ => prec(-1, seq(
//choice(':', '::'),
//$.sym_lit),
//),
sym_lit: $ =>
seq(repeat($._metadata_lit),
SYMBOL),
_form: $ =>
choice(// atom-ish
$.num_lit,
$.fancy_literal,
//$.defun_header,
$.kwd_lit,
//seq($._gap, $.kwd_lit),
$.str_lit,
$.char_lit,
$.nil_lit,
//$.bool_lit,
$.package_lit,
$.sym_lit,
// basic collection-ish
$.list_lit,
@ -181,13 +202,9 @@ module.exports = grammar(clojure, {
$.unquoting_lit,
$.include_reader_macro,
$.complex_num_lit,
'.',
seq($._gap, '.'),
),
sym_lit: $ =>
seq(repeat($._metadata_lit),
SYMBOL),
include_reader_macro: $ =>
seq(repeat($._metadata_lit),
field('marker', choice("#+", "#-")),

@ -90,10 +90,6 @@
"type": "SYMBOL",
"name": "fancy_literal"
},
{
"type": "SYMBOL",
"name": "kwd_lit"
},
{
"type": "SYMBOL",
"name": "str_lit"
@ -106,6 +102,10 @@
"type": "SYMBOL",
"name": "nil_lit"
},
{
"type": "SYMBOL",
"name": "package_lit"
},
{
"type": "SYMBOL",
"name": "sym_lit"
@ -171,8 +171,17 @@
"name": "complex_num_lit"
},
{
"type": "STRING",
"value": "."
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_gap"
},
{
"type": "STRING",
"value": "."
}
]
}
]
},
@ -721,7 +730,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",
@ -730,11 +739,11 @@
"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",
"value": "[#':0-9]"
"value": "[#'0-9]"
}
]
}
@ -904,7 +913,7 @@
"members": [
{
"type": "PREC",
"value": 2,
"value": 4,
"content": {
"type": "SYMBOL",
"name": "defun"
@ -912,7 +921,7 @@
},
{
"type": "PREC",
"value": 2,
"value": 4,
"content": {
"type": "SYMBOL",
"name": "loop_macro"
@ -2494,6 +2503,99 @@
}
]
},
"dotted_sym_lit": {
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "sym_lit"
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "sym_lit"
}
]
}
}
]
}
},
"package_lit": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "package",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "dotted_sym_lit"
},
{
"type": "SYMBOL",
"name": "sym_lit"
}
]
}
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "STRING",
"value": "::"
}
]
},
{
"type": "FIELD",
"name": "symbol",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "dotted_sym_lit"
},
{
"type": "SYMBOL",
"name": "sym_lit"
}
]
}
}
]
}
},
"include_reader_macro": {
"type": "SEQ",
"members": [

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
==========================================
================================================================================
Block Comments
==========================================
================================================================================
#|(ql.foo:quickload "cl-project")
(defun add (a b) |
@ -8,84 +8,162 @@ Block Comments
(add 8 9)
---
(source (block_comment) (list_lit (sym_lit) (num_lit) (num_lit)))
--------------------------------------------------------------------------------
(source
(block_comment)
(list_lit
(sym_lit)
(num_lit)
(num_lit)))
==========================================
================================================================================
Block Comments 2
==========================================
================================================================================
(add #|8 |#9)
---
(source (list_lit (sym_lit) (block_comment) (num_lit)))
--------------------------------------------------------------------------------
(source
(list_lit
(sym_lit)
(block_comment)
(num_lit)))
==========================================
================================================================================
Quasi-Quoting
==========================================
================================================================================
`(add a ,(b))
`(add a ,@(b))
`(add a , b)
`(add a ,b)
---
(source
(syn_quoting_lit (list_lit (sym_lit) (sym_lit) (unquoting_lit (list_lit (sym_lit)))))
(syn_quoting_lit (list_lit (sym_lit) (sym_lit) (unquote_splicing_lit (list_lit (sym_lit)))))
(syn_quoting_lit (list_lit (sym_lit) (sym_lit) (unquoting_lit (sym_lit))))
(syn_quoting_lit (list_lit (sym_lit) (sym_lit) (unquoting_lit (sym_lit)))))
--------------------------------------------------------------------------------
==========================================
(source
(syn_quoting_lit
(list_lit
(sym_lit)
(sym_lit)
(unquoting_lit
(list_lit
(sym_lit)))))
(syn_quoting_lit
(list_lit
(sym_lit)
(sym_lit)
(unquote_splicing_lit
(list_lit
(sym_lit)))))
(syn_quoting_lit
(list_lit
(sym_lit)
(sym_lit)
(unquoting_lit
(sym_lit))))
(syn_quoting_lit
(list_lit
(sym_lit)
(sym_lit)
(unquoting_lit
(sym_lit)))))
================================================================================
Fancy Literal
==========================================
================================================================================
(|`(add a ,(b))| a)
---
--------------------------------------------------------------------------------
(source (list_lit (fancy_literal) (sym_lit)))
(source
(list_lit
(fancy_literal)
(sym_lit)))
==========================================
================================================================================
Defun header
==========================================
================================================================================
(defun a (a b)
(car 1 2)
2)
( defun a (a b)
(car 1 2)
2)
---
(source
(list_lit (defun (defun_header (defun_keyword) (sym_lit) (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (num_lit) (num_lit)) (num_lit)))
(list_lit (defun (defun_header (defun_keyword) (sym_lit) (list_lit (sym_lit) (sym_lit))) (list_lit (sym_lit) (num_lit) (num_lit)) (num_lit))))
--------------------------------------------------------------------------------
==========================================
(source
(list_lit
(defun
(defun_header
(defun_keyword)
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)))
(list_lit
(sym_lit)
(num_lit)
(num_lit))
(num_lit)))
(list_lit
(defun
(defun_header
(defun_keyword)
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)))
(list_lit
(sym_lit)
(num_lit)
(num_lit))
(num_lit))))
================================================================================
Vectors
==========================================
================================================================================
#( 2 3 4)
#()
---
(source (vec_lit (list_lit (num_lit) (num_lit) (num_lit))) (vec_lit (list_lit)))
--------------------------------------------------------------------------------
==========================================
(source
(vec_lit
(list_lit
(num_lit)
(num_lit)
(num_lit)))
(vec_lit
(list_lit)))
================================================================================
Arrays
==========================================
================================================================================
#0A2
#2A((2 3 4))
---
(source (vec_lit (num_lit)) (vec_lit (array_dimension (num_lit)) (list_lit (list_lit (num_lit) (num_lit) (num_lit)))))
--------------------------------------------------------------------------------
==========================================
(source
(vec_lit
(num_lit))
(vec_lit
(array_dimension
(num_lit))
(list_lit
(list_lit
(num_lit)
(num_lit)
(num_lit)))))
================================================================================
Loop Macro
==========================================
================================================================================
(cl:loop for dim-idx in xyz
for letter in (list 'x 'y 'z)
@ -97,22 +175,118 @@ Loop Macro
(x '(+ thread-idx-x (* block-idx-x block-dim-x)))
(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) (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)))))))))))))))))
--------------------------------------------------------------------------------
==========================================
(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)))))))))))))))))
================================================================================
Loop Macro (Accumulation)
==========================================
================================================================================
(loop for i below 10
collect x into a)
---
(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))))))
--------------------------------------------------------------------------------
==========================================
(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)
@ -120,19 +294,55 @@ Loop Macro (finally)
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)))))))
==========================================
--------------------------------------------------------------------------------
(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)
@ -140,53 +350,171 @@ Loop Macro (do do do)
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)))))))
==========================================
--------------------------------------------------------------------------------
(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))))
--------------------------------------------------------------------------------
==========================================
(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)))
--------------------------------------------------------------------------------
==========================================
(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))))
--------------------------------------------------------------------------------
(source
(include_reader_macro
(sym_lit)
(list_lit
(loop_macro)))
(include_reader_macro
(sym_lit)
(list_lit
(loop_macro))))
================================================================================
Packages
================================================================================
foo:baz
foo.bar:baz
(foo.bar:baz)
--------------------------------------------------------------------------------
(source
(package_lit
(sym_lit)
(sym_lit))
(package_lit
(dotted_sym_lit
(sym_lit)
(sym_lit))
(sym_lit))
(list_lit
(package_lit
(dotted_sym_lit
(sym_lit)
(sym_lit))
(sym_lit))))
================================================================================
Keywords
================================================================================
:foo
:foo.bar
--------------------------------------------------------------------------------
(source
(package_lit
(sym_lit))
(package_lit
(dotted_sym_lit
(sym_lit)
(sym_lit))))
==========================================
Decimals
==========================================
#(2 2 .2 3 2 2 2 3 3)
================================================================================
Functions with numbers (TODO!!!)
================================================================================
1+
1-
--------------------------------------------------------------------------------
(source
(num_lit)
(sym_lit)
(num_lit)
(sym_lit))