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) {
@ -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"
@ -228,9 +232,6 @@
"members": [
{
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 0,
"content": {
"type": "SEQ",
"members": [
@ -252,13 +253,30 @@
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#x"
},
{
"type": "STRING",
"value": "0"
"value": "#X"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[xX]"
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
@ -266,24 +284,53 @@
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "N"
"value": "#o"
},
{
"type": "STRING",
"value": "#O"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-7]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "REPEAT1",
"content": {
@ -304,6 +351,43 @@
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#b"
},
{
"type": "STRING",
"value": "#B"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-1]"
}
}
]
},
{
"type": "SEQ",
"members": [
@ -427,7 +511,6 @@
}
]
}
}
},
{
"type": "CHOICE",
@ -1848,9 +1931,6 @@
"type": "ALIAS",
"content": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 0,
"content": {
"type": "SEQ",
"members": [
@ -1871,14 +1951,31 @@
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
"value": "#x"
},
{
"type": "STRING",
"value": "#X"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[xX]"
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
@ -1886,24 +1983,53 @@
"type": "PATTERN",
"value": "[0-9a-fA-F]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "N"
"value": "#o"
},
{
"type": "STRING",
"value": "#O"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-7]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "REPEAT1",
"content": {
@ -1924,6 +2050,43 @@
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "#b"
},
{
"type": "STRING",
"value": "#B"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[+-]"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[0-1]"
}
}
]
},
{
"type": "SEQ",
"members": [
@ -2047,7 +2210,6 @@
}
]
}
}
},
"named": true,
"value": "num_lit"
@ -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))))))