Restructure numbers and self_referentials

pull/70/head
Stephan Seitz 2021-04-19 16:55:59 +07:00
parent 71d15ad86e
commit 3cffe6d000
5 changed files with 83324 additions and 84254 deletions

@ -58,21 +58,24 @@ const HEX_DIGIT =
const OCTAL_DIGIT =
/[0-7]/;
const BINARY_DIGIT =
/[0-1]/;
const HEX_NUMBER =
seq("0",
/[xX]/,
repeat1(HEX_DIGIT),
optional("N"));
seq(choice('#x', '#X'), optional(/[+-]/),
repeat1(HEX_DIGIT));
const OCTAL_NUMBER =
seq("0",
repeat1(OCTAL_DIGIT),
optional("N"));
seq(choice('#o', '#O'), optional(/[+-]/),
repeat1(OCTAL_DIGIT));
const BINARY_NUMBER =
seq(choice('#b', '#B'), optional(/[+-]/),
repeat1(BINARY_DIGIT));
// XXX: not constraining number before r/R
// XXX: not constraining portion after r/R
const RADIX_NUMBER =
seq(repeat1(DIGIT),
seq('#',
repeat1(DIGIT),
/[rR]/,
repeat1(ALPHANUMERIC));
@ -96,13 +99,15 @@ const INTEGER =
optional(/[MN]/));
const NUMBER =
token(prec(0, seq(optional(/[+-]/),
choice(HEX_NUMBER,
//OCTAL_NUMBER,
token(seq(optional(/[+-]/),
choice(
HEX_NUMBER,
OCTAL_NUMBER,
RADIX_NUMBER,
BINARY_NUMBER,
RATIO,
DOUBLE,
INTEGER))));
INTEGER)));
function clSymbol(symbol) {
@ -273,8 +278,8 @@ module.exports = grammar(clojure, {
seq('#', choice(original, /\\[nN]ewline/, /\\[lL]inefeed/, /\\[Ss]pace/, /\\[nN]ull/, /\\[rR]ull/)),
vec_lit: $ =>
prec(PREC.SPECIAL,
choice(
prec(PREC.SPECIAL,
choice(
seq(field('open', choice('#0A', '#0a')), $.num_lit),
seq(field('open', '#'), optional($.array_dimension), $.list_lit))),
@ -315,6 +320,8 @@ module.exports = grammar(clojure, {
kwd_symbol: _ =>
seq(SYMBOL),
self_referential_reader_macro: _ => /#\d+[=#]/,
_form: $ =>
seq(optional('#'),
choice(
@ -322,9 +329,10 @@ module.exports = grammar(clojure, {
$.fancy_literal,
$.vec_lit,
$.kwd_lit,
// No idea why this is necessary...
// No idea why this is necessary...It is never used but triggers some background magic
alias(seq(field('open', '#'), optional(/\d+[aA]/), $.list_lit), $.vec_lit),
$.str_lit,
$.self_referential_reader_macro,
$.char_lit,
$.nil_lit,
$.path_lit,

@ -151,6 +151,10 @@
"type": "SYMBOL",
"name": "str_lit"
},
{
"type": "SYMBOL",
"name": "self_referential_reader_macro"
},
{
"type": "SYMBOL",
"name": "char_lit"
@ -229,204 +233,283 @@
{
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "PATTERN",
"value": "[xX]"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-fA-F]"
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#x"
},
{
"type": "STRING",
"value": "#X"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "N"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[+-]"
},
{
"type": "BLANK"
}
},
{
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[rR]"
},
{
"type": "REPEAT1",
"content": {
"value": "[0-9a-fA-F]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#o"
},
{
"type": "STRING",
"value": "#O"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9a-zA-Z]"
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-7]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "PATTERN",
"value": "[rR]"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-zA-Z]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#b"
},
{
"type": "STRING",
"value": "#B"
}
},
{
"type": "STRING",
"value": "/"
},
{
"type": "REPEAT1",
"content": {
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-1]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "STRING",
"value": "/"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "REPEAT",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
},
{
"type": "BLANK"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "REPEAT",
"content": {
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[eEsSfFdDlL]"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[+-]"
},
{
"type": "BLANK"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[eEsSfFdDlL]"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
"value": "[0-9]"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[MN]"
},
{
"type": "BLANK"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[MN]"
},
{
"type": "BLANK"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
},
{
@ -1849,204 +1932,283 @@
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#x"
},
{
"type": "STRING",
"value": "#X"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[xX]"
},
{
"type": "REPEAT1",
"content": {
"value": "[0-9a-fA-F]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#o"
},
{
"type": "STRING",
"value": "#O"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9a-fA-F]"
"value": "[+-]"
},
{
"type": "BLANK"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "N"
},
{
"type": "BLANK"
}
]
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-7]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
},
{
"type": "PATTERN",
"value": "[rR]"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[rR]"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9a-zA-Z]"
}
"value": "[0-9a-zA-Z]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#b"
},
{
"type": "STRING",
"value": "#B"
}
},
{
"type": "STRING",
"value": "/"
},
{
"type": "REPEAT1",
"content": {
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-1]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "STRING",
"value": "/"
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "REPEAT",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
}
]
},
{
"type": "BLANK"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "REPEAT",
"content": {
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[eEsSfFdDlL]"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[+-]"
},
{
"type": "BLANK"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[eEsSfFdDlL]"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
"value": "[0-9]"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-9]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[0-9]"
"value": "[MN]"
},
{
"type": "BLANK"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[MN]"
},
{
"type": "BLANK"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
},
"named": true,
@ -3999,6 +4161,10 @@
}
]
},
"self_referential_reader_macro": {
"type": "PATTERN",
"value": "#\\d+[=#]"
},
"include_reader_macro": {
"type": "SEQ",
"members": [

@ -78,6 +78,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -286,6 +290,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -413,6 +421,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -535,6 +547,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -734,6 +750,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -863,6 +883,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -984,6 +1008,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1082,6 +1110,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1185,6 +1217,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1404,6 +1440,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1546,6 +1586,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1728,6 +1772,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -1989,6 +2037,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -2324,6 +2376,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -2496,6 +2552,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -2633,6 +2693,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -2790,6 +2854,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -2919,6 +2987,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3076,6 +3148,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3242,6 +3318,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3371,6 +3451,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3514,6 +3598,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3652,6 +3740,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3810,6 +3902,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -3984,6 +4080,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -4133,6 +4233,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -4254,6 +4358,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -4353,6 +4461,10 @@
"type": "read_cond_lit",
"named": true
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "set_lit",
"named": true
@ -4700,6 +4812,10 @@
"type": "return",
"named": false
},
{
"type": "self_referential_reader_macro",
"named": true
},
{
"type": "then",
"named": false

File diff suppressed because it is too large Load Diff

@ -811,7 +811,7 @@ Num Literals
--------------------------------------------------------------------------------
(source
(num_lit)
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)
@ -994,4 +994,79 @@ Trailing sharps
(sym_lit))
(list_lit
(sym_lit)
(sym_lit)))
(self_referential_reader_macro)))
================================================================================
https://lisptips.com/post/44370032877/literal-syntax-for-integers
================================================================================
#2r11010101 ;Another way of writing 213 decimal
#b11010101 ;Ditto
#b+11010101 ;Ditto
#o325 ;Ditto, in octal radix
#xD5 ;Ditto, in hexadecimal radix
#16r+D5 ;Ditto
#o-300 ;Decimal -192, written in base 8
#3r-21010 ;Same thing in base 3
#25R-7H ;Same thing in base 25
#xACCEDED ;181202413, in hexadecimal radix
--------------------------------------------------------------------------------
(source
(num_lit)
(comment)
(num_lit)
(comment)
(num_lit)
(comment)
(num_lit)
(comment)
(num_lit)
(comment)
(sym_lit)
(comment)
(num_lit)
(comment)
(sym_lit)
(comment)
(sym_lit)
(comment)
(num_lit)
(comment))
================================================================================
Self-references
================================================================================
(let ((position (mismatch #1="MemTotal:" line)))
(when (= position (length #1#))
(return
(parse-size line :start position))))
--------------------------------------------------------------------------------
(source
(list_lit
(sym_lit)
(list_lit
(list_lit
(sym_lit)
(list_lit
(sym_lit)
(self_referential_reader_macro)
(str_lit)
(sym_lit))))
(list_lit
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)
(list_lit
(sym_lit)
(self_referential_reader_macro)))
(list_lit
(sym_lit)
(list_lit
(sym_lit)
(sym_lit)
(kwd_lit
(kwd_symbol))
(sym_lit))))))