sexpr-plus

7.0.0 • Public • Published

sexpr-plus npm package CI status

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 = require("sexpr-plus").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.

Readme

Keywords

Package Sidebar

Install

npm i sexpr-plus

Weekly Downloads

7

Version

7.0.0

License

MIT

Last publish

Collaborators

  • an