| If you want to parse pure Clojure lexical syntax with read tables, one has to get rid of all CL lexical syntax, otherwise it would parse a mix of Common Lisp and Clojure syntax. Symbols in CL are totally different. There are escape characters and symbols can have different characters in their names. Symbols can start with numeric characters. / and . have no special meaning in CL. Keywords in CL don't need to start with : . If we want to read a Clojure keyword, one probably don't want to read a CL keyword, but a different data type. Lists in CL don't exist. Instead we have cons cells with dot notation and list-like notation optimization. ( a b . nil) = (a b) = (a . (b . nil)), (a b . c). In Clojure there are no cons cells in the syntax. If you read (a . b) with the CL reader, then it is a cons cell, in Clojure it would be some kind of list with three elements. If you read (a b .) in CL, then one gets a reader error. Clojure does not care. (a . (b . nil)) in CL are two cons cells which form a single list, in Clojure it would be two nested lists. CL has different numeric syntax. CL has various other notation for arrays, structures, bitvectors, ... CL has no metadata. CL has different backquote syntax. If one implements the Clojure reader stuff in https://clojure.org/reference/reader#_reader_forms one might as well implement the reader from scratch. |