You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.4 KiB

#!/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']))