diff options
author | Timotej Lazar <timotej.lazar@araneo.org> | 2015-03-27 14:22:49 +0100 |
---|---|---|
committer | Aleš Smodiš <aless@guru.si> | 2015-08-11 14:26:03 +0200 |
commit | 4cffac21da85476e3656b79a8da3a019429740f1 (patch) | |
tree | 37ddf60afcb0c9336c2312609d6b90ad86bc9bb2 /prolog/util.py | |
parent | c9a2a1cd045a528e773b3e7705665bec181e84f6 (diff) |
Add a parser for (simplified) Prolog
Diffstat (limited to 'prolog/util.py')
-rw-r--r-- | prolog/util.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/prolog/util.py b/prolog/util.py index 83a3ade..3130ea5 100644 --- a/prolog/util.py +++ b/prolog/util.py @@ -2,8 +2,6 @@ from collections import namedtuple -from .lexer import lexer, operators - # Stores a token's type and value, and optionally the position of the first # character in the lexed stream. class Token(namedtuple('Token', ['type', 'val', 'pos', 'rule', 'part', 'stop'])): @@ -39,6 +37,9 @@ class Token(namedtuple('Token', ['type', 'val', 'pos', 'rule', 'part', 'stop'])) self.part if part is None else part, self.stop if stop is None else stop) +from .lexer import lexer, operators +from .parser import parser + # Return a list of tokens in [text]. def tokenize(text): lexer.input(text) @@ -142,6 +143,11 @@ def compose(tokens): prev = t return code.strip() +# Parse [text] into an AST. +def parse(text): + tree = parser.parse(text) + return tree + # Rename variables in [tokens] to A0, A1, A2,… in order of appearance. def rename_vars(tokens, names=None): if names is None: |