summaryrefslogtreecommitdiff
path: root/prolog/util.py
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@araneo.org>2015-03-27 14:22:49 +0100
committerAleš Smodiš <aless@guru.si>2015-08-11 14:26:03 +0200
commit4cffac21da85476e3656b79a8da3a019429740f1 (patch)
tree37ddf60afcb0c9336c2312609d6b90ad86bc9bb2 /prolog/util.py
parentc9a2a1cd045a528e773b3e7705665bec181e84f6 (diff)
Add a parser for (simplified) Prolog
Diffstat (limited to 'prolog/util.py')
-rw-r--r--prolog/util.py10
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: