#!/usr/bin/env python3 import json import sys tokens = dict() program = './ast.json' if len(sys.argv) > 1: program = sys.argv[1] with open(program, 'r') as json_tokens: tokens = json.loads(json_tokens.read()) def throw(token: dict, message): print("{} on line {} ".format(message, token['line_number'])) print("\033[4m" + token['value'] + "\033[0m") sys.exit(1) def parse_expression(params, expression): split_on_space = expression.split(" ") if len(split_on_space) == 1: for param in params: if param['signifier'] == expression and param['type'] == 'string': return param['expression'] else: return "Unknown" for token in tokens: if token['variant'] == "syntax_error": throw(token, "Syntax error") if token['variant'] == "function_call": args = token['params'] function = token['function'] params = function['params'] if len(args) != len(params): throw(token, "Wrong number of arguments") for index in range(0, len(args)): if args[index]['type'] != params[index]['type']: throw(token, "Type missmatch on arguments") signifier = params[index]['name'] params[index] = args[index] params[index]['signifier'] = signifier for part in function['body']: if part['type'] == "stdout": print(parse_expression(params, part['expression']))