hissp.reader module¶
The Lissp language reader and associated helper functions.
Compiles Lissp files to Python files when run as the main module.
The reader is organized as a lexer and parser. The parser is extensible with Lissp reader macros. The lexer is not extensible, and doesn’t do much more than pull tokens from a relatively simple regex and track its position for error messages.
-
hissp.reader.ENTUPLE= ('lambda', (':', ':*', 'xAUTO0_'), 'xAUTO0_')¶ Used by the template macro to make tuples.
To avoid creating a dependency on Hissp, by default, templates spell out the entuple implementation every time, but you can override this by setting some other value here.
-
hissp.reader.DROP= <object object>¶ The sentinel value returned by the discard macro
_#, which the reader skips over when parsing. Reader macros can have read-time side effects with no Hissp output by returning this.
-
exception
hissp.reader.SoftSyntaxError¶ Bases:
SyntaxErrorA syntax error that could be corrected with more lines of input.
When the REPL encounters this when attempting to evaluate a form, it will ask for more lines, rather than aborting with an error.
-
class
hissp.reader.Lexer(code: str, file: str = '<?>')¶ Bases:
IteratorThe tokenizer for the Lissp language.
Most of the actual tokenizing is done by the regex. The Lexer adds some position tracking to that to help with error messages.
-
hissp.reader.gensym_counter(count=[31])¶ Call to increment the gensym counter, and return the new count. Used by the gensym reader macro
$#to ensure symbols are unique.
-
class
hissp.reader.Lissp(qualname='__main__', ns=None, verbose=False, evaluate=False, filename='<?>')¶ Bases:
objectThe parser for the Lissp language.
Wraps around a Hissp compiler instance. Parses Lissp tokens into Hissp syntax trees.
-
reinit()¶ Reset position, nesting depth, and gensym stack.
-
position()¶ Get the
filename,lineno,offsetandtextfor aSyntaxError, from theLexergiven toparse.
-
parse(tokens: hissp.reader.Lexer) → Iterator¶ Build Hissp forms from a
Lexer.
-
static
escape(atom)¶ Process the backslashes in a token.
-
template(form)¶ Process form as template.
-
gensym_context()¶ Start a new gensym context for the current template.
-
unquote_context()¶ Start a new unquote context for the current template.
-
-
hissp.reader.is_string(form)¶ Determines if form could have been read from a Lissp string literal.
It’s not enough to check if the form has a string type. Several token types such as control words, symbols, and Python injections, read in as strings. Macros may need to distinguish these cases.
-
hissp.reader.transpile(package: Optional[Union[str, module]], *modules: Union[str, pathlib.PurePath])¶ Compiles the named modules to Python files. If the package is None or “”, it uses the current working directory without using a package. Lissp files must know their package at compile time to resolve imports correctly.
-
hissp.reader.transpile_module(package: Union[str, module], resource: Union[str, pathlib.PurePath], out: Union[None, str, bytes, pathlib.Path] = None)¶ Transpile a single submodule in a package.