Atoms are parsed to strings. String literals delimited by
" are parsed into
String objects to make them distinct from the other atoms. Escape sequences
\b are supported. Lists are parsed
Arrays. Note this means that the result is not a binary tree. This also
means there are no pairs or cons cells, and the expression
(a . b) is parsed
['a', '.', 'b'].
var parse = require('s-expression'); console.log(parse('a')); // 'a' console.log(parse('(a b "c")')); // ['a', 'b', [String: 'c']] console.log(parse("'(a `(b ,c))")); // ['quote', ['a', ['quasiquote', ['b', ['unquote', 'c']]]]]
Errors have two additional properties:
give you the line number and character column of the parse error in your input.
Line means either LF or CRLF and column means one "character" as understood by
There are four kinds of errors:
- An unterminated string literal.
- Not an atom or string after a quote (
- The input ends before the expression is complete.
- There is more input after the expression is complete.
Contributions are welcome but please note that this project is meant to be a one-file parser without dependencies that is not too hard to understand.
This software is licensed under MIT, see