diff --git a/main.py b/main.py index 7dfe8ba..5b869fc 100755 --- a/main.py +++ b/main.py @@ -41,17 +41,16 @@ print("Unimplemented value: %s" % (value)) def run_statement(env, ast): - subject = resolve_value(env, ast[1]) - verb = ast[2] - if verb == None: + subject = resolve_value(env, ast.subject) + if ast.verb == None: return subject args = [] - for arg in ast[3]: + for arg in ast.arguments: args.append(resolve_value(env, arg)) if subject[0] == "text": - return text_dispatch(subject, verb, args) + return text_dispatch(subject, ast.verb, args) elif subject[0] == "module": - return module_dispatch(subject, verb, args) + return module_dispatch(subject, ast.verb, args) return None def run_set(env, ast): @@ -63,10 +62,10 @@ return None def run_command(env, ast): - type = ast[0] - if type == "statement": + if ast.__class__ == parse.Statement: return run_statement(env, ast) - elif type == "set": + type = ast[0] + if type == "set": return run_set(env, ast) elif type == "if": return run_if(env, ast) diff --git a/parse.py b/parse.py index a17e2ac..11ecdc9 100644 --- a/parse.py +++ b/parse.py @@ -79,6 +79,15 @@ def __repr__(self): return "Text('%s')" % (self.value) +class Statement: + def __init__(self, subject, verb, arguments): + self.subject = subject + self.verb = verb + self.arguments = arguments + + def __repr__(self): + return "Statement(subject %s, verb '%s', arguments %s)" % (self.subject, self.verb, self.arguments) + class Parser: def __init__(self, tokens): self.tokens = tokens @@ -155,8 +164,9 @@ return None else: arguments = [] - log.log(log.PARSER, log.DEBUG, "Parsed statement: subject %s verb %s args %s" % (subject, verb, arguments)) - return ('statement', subject, verb, arguments) + statement = Statement(subject, verb, arguments) + log.log(log.PARSER, log.DEBUG, "Parsed statement %s" % (statement)) + return statement def parse_set(self): token = self.next()