sexpr-plus
Recursive descent parser for S-expressions, with features useful for writing an S-expr-based programming language. Written for eslisp, but generalisable.
Outputs an array containing objects representing parsed forms:
- Lists are parsed to
{ type: "list", content: [ <other objects>... ] }
. - Atoms are parsed to
{ type: "atom", content: "<atomName>" }
. - Strings (delimited with
"
s) are parsed to{ type: "string", content: "<atomName>" }
. They support the same escape sequences as JavaScript strings:\"
,\\
,\n
,\r
,\t
,\f
, and\b
. - Supports quote, quasiquote, unquote and unquote-splicing, with
'
,`
,,
and,@
. They're turned into the appropriate atoms. - Comments are from
;
til end of line. They are not present in the output.
Empty inputs or inputs containing only comments produce an empty array.
Forked from the more minimal fwg/s-expression.
Node locations
All output nodes also have a location
property, showing where in the input
that node originated:
{
start : { offset, line, column },
end : { offset, line, column }
}
All are integers: offset
is the number of characters since the input, line
and column
are 1-based and self-explanatory.
These may be handy for constructing source maps or showing more detailed error messages.
Usage
npm i sexpr-plus
var parse = parse;
Call parse
with a string containing code to parse.
If you need to catch and distinguish between different types of Error
with
instanceof
while parsing, the syntax error prototype is available at
require("sexpr-plus").SyntaxError
.
License
MIT.