diff --git a/code.txt b/code.txt index c72b7e3..2aa4dee 100755 --- a/code.txt +++ b/code.txt @@ -10,5 +10,6 @@ System Print BeginText Hello, there! EndText Done System Print BeginText Please enter your name: EndText Done Set Name To System Read EndSet BeginNote Reads an entire line EndNote -Set Greeting To BeginText Hi there, EndText Append Name EndSet +Set Prefix To BeginText Hi there, EndText EndSet +Set Greeting To Prefix Append Name EndSet System Print Greeting Done diff --git a/main.py b/main.py index 84b2d50..ae3e5c3 100755 --- a/main.py +++ b/main.py @@ -42,13 +42,16 @@ def run_statement(env, ast): subject = resolve_value(env, ast[1]) + verb = ast[2] + if verb == None: + return subject args = [] for arg in ast[3]: args.append(resolve_value(env, arg)) if subject[0] == "text": - return text_dispatch(subject, ast[2], args) + return text_dispatch(subject, verb, args) elif subject[0] == "module": - return module_dispatch(subject, ast[2], args) + return module_dispatch(subject, verb, args) return None def run_set(env, ast): diff --git a/parse.py b/parse.py index bbf0496..d4dee5d 100644 --- a/parse.py +++ b/parse.py @@ -93,13 +93,6 @@ print("Unexpected type %s" % (type)) return None -def parse_verb(): - (type, value) = parser_next() - if type != "symbol": - print("Expected symbol, got %s" % (type)) - return None - return value - def parse_arguments(terminator): args = [] while True: @@ -123,14 +116,24 @@ if not subject: print("While parsing subject") return None - verb = parse_verb() - if not verb: - print("While parsing verb") - return None - arguments = parse_arguments(terminator) - if arguments is None: - print("While parsing arguments") - return None + (type, value) = parser_next() + if type == "keyword": + if value == terminator: + verb = None + else: + print("Unexpected keyword %s" % (value)) + return None + elif type == "symbol": + verb = value + else: + verb = value + if verb: + arguments = parse_arguments(terminator) + if arguments is None: + print("While parsing arguments") + return None + else: + arguments = [] print("Parsed statement: subject %s verb %s args %s" % (subject, verb, arguments)) return ('statement', subject, verb, arguments)