parent
f7b9cd734a
commit
c38f5ffacc
@ -1,104 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import operator
|
||||
import sys
|
||||
tokens = dict()
|
||||
program = './tokens.json'
|
||||
if len(sys.argv) > 1:
|
||||
program = sys.argv[1]
|
||||
with open(program, 'r') as json_tokens:
|
||||
tokens = json.loads(json_tokens.read())
|
||||
|
||||
|
||||
def peek(index: int) -> dict:
|
||||
global tokens
|
||||
result = dict()
|
||||
if index < len(tokens):
|
||||
result = tokens[index]
|
||||
return result
|
||||
|
||||
def find_token_indicies(key: str) -> list:
|
||||
global tokens
|
||||
result = list()
|
||||
index = 0
|
||||
for token in tokens:
|
||||
if token["value"] == key:
|
||||
result.append(index)
|
||||
index = index + 1
|
||||
return result
|
||||
|
||||
def collect_body(index: int) -> list:
|
||||
global tokens
|
||||
uncollapsed_tokens = list()
|
||||
token = peek(index + 1)
|
||||
if token['variant'] != "operator":
|
||||
return uncollapsed_tokens
|
||||
maybe_expression = peek(index + 2)
|
||||
if maybe_expression['variant'] == 'expression':
|
||||
uncollapsed_tokens.append(token)
|
||||
return uncollapsed_tokens
|
||||
elif maybe_expression['variant'] == 'start_block':
|
||||
index = index + 2
|
||||
while True:
|
||||
index = index + 1
|
||||
collectable = peek(index)
|
||||
if collectable['variant'] == 'end_block':
|
||||
break
|
||||
uncollapsed_tokens.append(collectable)
|
||||
return uncollapsed_tokens
|
||||
|
||||
def collect_parameters(params, line_number, usefull_tokens) -> list:
|
||||
result = list()
|
||||
for param in params:
|
||||
candidate_token = dict()
|
||||
for token in usefull_tokens:
|
||||
if line_number > token['line_number'] and param == token['signifier']:
|
||||
candidate_token = token
|
||||
if candidate_token:
|
||||
result.append(candidate_token)
|
||||
return result
|
||||
|
||||
def collapse_tokens(uncollapsed_tokens: list) -> list:
|
||||
usefull_tokens = list()
|
||||
for index in range(0, len(uncollapsed_tokens)):
|
||||
token = uncollapsed_tokens[index]
|
||||
|
||||
# This is a declaration
|
||||
if token['variant'] == 'type':
|
||||
maybe_signifier = peek(index + 2)
|
||||
expression = ''
|
||||
line_number = token['line_number']
|
||||
if maybe_signifier["variant"] == "signifier":
|
||||
name = maybe_signifier['value']
|
||||
for i in find_token_indicies(name):
|
||||
maybe_expression = peek(i + 2)
|
||||
if maybe_expression['variant'] == 'expression':
|
||||
line_number = maybe_expression['line_number']
|
||||
expression = maybe_expression['value']
|
||||
break
|
||||
usefull_token = { "variant": "variable_declaration", "signifier": name, "type": token['value'], "line_number": line_number, "expression": expression }
|
||||
usefull_tokens.append(usefull_token)
|
||||
if token['variant'] == 'function_declaration':
|
||||
body = collect_body(index)
|
||||
usefull_token = { "variant": "function_declaration", "signifier": token['value'], "line_number": token['line_number'], "params": token['params'] ,"body": body}
|
||||
|
||||
usefull_tokens.append(usefull_token)
|
||||
|
||||
if token['variant'] == 'function_call':
|
||||
usefull_token = {"variant": "function_call", "signifier": token['value'], "line_number": token['line_number'], "params": token['params']}
|
||||
|
||||
usefull_tokens.append(usefull_token)
|
||||
|
||||
usefull_tokens.sort(key=operator.itemgetter('line_number'))
|
||||
return usefull_tokens
|
||||
|
||||
collapsed_tokens = collapse_tokens(tokens)
|
||||
|
||||
for index in range(0, len(collapsed_tokens)):
|
||||
token = collapsed_tokens[index]
|
||||
if token['variant'] == 'function_call':
|
||||
function = collect_parameters([token['signifier']], token['line_number'],collapsed_tokens.copy())
|
||||
collapsed_tokens[index]['function'] = function
|
||||
params = collect_parameters(token['params'], token['line_number'],collapsed_tokens.copy())
|
||||
collapsed_tokens[index]['params'] = params
|
||||
print(json.dumps(collapsed_tokens))
|
Loading…
Reference in new issue