Parser

The parser functions and their brief description.

lispereter.parser.atom(token: str) -> (<class 'str'>, (<class 'int'>, <class 'float'>))

Numbers become numbers; every other token is a symbol.

Args:
token (str): A symbol or a number
>>> atom("11")
11
>>> atom(11)
11
>>> atom("11.0")
11.0
>>> atom("begin")
'begin'
lispereter.parser.parse(program: str) -> ((<class 'str'>, (<class 'int'>, <class 'float'>)), <class 'list'>)

Read a Scheme expression from a string.

Args:
program (str): A given Scheme expression
>>> parse("(begin (define r 10) (* pi (* r r)))")
['begin', ['define', 'r', 10], ['*', 'pi', ['*', 'r', 'r']]]
lispereter.parser.read_from_tokens(tokens: list) -> ((<class 'str'>, (<class 'int'>, <class 'float'>)), <class 'list'>)

Read an expression from a sequence of tokens.

Args:
tokens (list): A list of tokens generated by tokenize(chars)
>>> read_from_tokens(['(', 'begin', '(', 'define', 'r', '10', ')', '(', '*', 'pi', '(', '*', 'r', 'r', ')', ')', ')'])
['begin', ['define', 'r', 10], ['*', 'pi', ['*', 'r', 'r']]]
lispereter.parser.tokenize(chars: str) → list

Convert a string of characters into a list of tokens.

Args:
chars (str): The input to be tokenized.
>>> tokenize("(begin (define r 10) (* pi (* r r)))")
['(', 'begin', '(', 'define', 'r', '10', ')', '(', '*', 'pi', '(', '*', 'r', 'r', ')', ')', ')']