parent
9b1ff4c361
commit
8cd72a3aec
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
|
||||
tokens = dict()
|
||||
with open('./tokens.json', 'r') as json_tokens:
|
||||
tokens = json.loads(json_tokens.read())
|
||||
|
||||
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 peek(index: int) -> dict:
|
||||
global tokens
|
||||
result = dict()
|
||||
if index < len(tokens):
|
||||
result = tokens[index]
|
||||
return result
|
||||
|
||||
current_scope = "main"
|
||||
stack = [{"scope": current_scope}]
|
||||
ast = {current_scope: {"env": stack[-1] }}
|
||||
for index in range(0, len(tokens)):
|
||||
token = tokens[index]
|
||||
if token['variant'] == "start_block":
|
||||
current_scope = "user_" + str(token["line_number"])
|
||||
stack.append({"scope": current_scope} )
|
||||
ast[current_scope] = {}
|
||||
if token['variant'] == "end_block":
|
||||
old_stack = stack.pop()
|
||||
ast[current_scope]["env"] = old_stack
|
||||
current_scope = stack[-1]["scope"]
|
||||
if token['variant'] == "type":
|
||||
maybe_signifier = peek(index + 2)
|
||||
if maybe_signifier["variant"] == "signifier":
|
||||
name = maybe_signifier['value']
|
||||
stack[-1][name] = {"type": token['value']}
|
||||
|
||||
print(json.dumps(ast))
|
@ -0,0 +1,263 @@
|
||||
[
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "float",
|
||||
"line_number": 1
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 1
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "x",
|
||||
"line_number": 1
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 1
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "10.1",
|
||||
"line_number": 1
|
||||
},
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "func",
|
||||
"line_number": 3
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 3
|
||||
},
|
||||
{
|
||||
"variant": "function_declaration",
|
||||
"value": "hello",
|
||||
"params": [
|
||||
{
|
||||
"type": "float",
|
||||
"name": "x"
|
||||
}
|
||||
],
|
||||
"line_number": 3
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 3
|
||||
},
|
||||
{
|
||||
"variant": "start_block",
|
||||
"value": "{",
|
||||
"line_number": 3
|
||||
},
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "stdout",
|
||||
"line_number": 4
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 4
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "out",
|
||||
"line_number": 4
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 4
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "x * 10",
|
||||
"line_number": 4
|
||||
},
|
||||
{
|
||||
"variant": "end_block",
|
||||
"value": "}",
|
||||
"line_number": 5
|
||||
},
|
||||
{
|
||||
"variant": "start_block",
|
||||
"value": "{",
|
||||
"line_number": 7
|
||||
},
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "str",
|
||||
"line_number": 8
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 8
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "name",
|
||||
"line_number": 8
|
||||
},
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "int",
|
||||
"line_number": 9
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 9
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "var",
|
||||
"line_number": 9
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 9
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "1",
|
||||
"line_number": 9
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "name",
|
||||
"line_number": 10
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 10
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "hej hopp",
|
||||
"line_number": 10
|
||||
},
|
||||
{
|
||||
"variant": "end_block",
|
||||
"value": "}",
|
||||
"line_number": 11
|
||||
},
|
||||
{
|
||||
"variant": "function_call",
|
||||
"value": "hello",
|
||||
"params": [
|
||||
"x"
|
||||
],
|
||||
"line_number": 14
|
||||
},
|
||||
{
|
||||
"variant": "type",
|
||||
"value": "func",
|
||||
"line_number": 16
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": ":",
|
||||
"line_number": 16
|
||||
},
|
||||
{
|
||||
"variant": "function_declaration",
|
||||
"value": "good_bye",
|
||||
"params": [
|
||||
{
|
||||
"type": "void",
|
||||
"name": "none"
|
||||
}
|
||||
],
|
||||
"line_number": 16
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 16
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "int: getout = 0",
|
||||
"line_number": 16
|
||||
},
|
||||
{
|
||||
"variant": "function_call",
|
||||
"value": "good_bye",
|
||||
"params": [
|
||||
""
|
||||
],
|
||||
"line_number": 18
|
||||
},
|
||||
{
|
||||
"variant": "conditional",
|
||||
"value": "if",
|
||||
"condition": "x ? 1",
|
||||
"line_number": 20
|
||||
},
|
||||
{
|
||||
"variant": "start_block",
|
||||
"value": "{",
|
||||
"line_number": 20
|
||||
},
|
||||
{
|
||||
"variant": "function_call",
|
||||
"value": "hello",
|
||||
"params": [
|
||||
"x"
|
||||
],
|
||||
"line_number": 21
|
||||
},
|
||||
{
|
||||
"variant": "end_block",
|
||||
"value": "}",
|
||||
"line_number": 22
|
||||
},
|
||||
{
|
||||
"variant": "loop",
|
||||
"value": "while",
|
||||
"condition": "x < 1",
|
||||
"line_number": 24
|
||||
},
|
||||
{
|
||||
"variant": "start_block",
|
||||
"value": "{",
|
||||
"line_number": 24
|
||||
},
|
||||
{
|
||||
"variant": "signifier",
|
||||
"value": "x",
|
||||
"line_number": 25
|
||||
},
|
||||
{
|
||||
"variant": "operator",
|
||||
"value": "=",
|
||||
"line_number": 25
|
||||
},
|
||||
{
|
||||
"variant": "expression",
|
||||
"value": "x -1",
|
||||
"line_number": 25
|
||||
},
|
||||
{
|
||||
"variant": "function_call",
|
||||
"value": "hello",
|
||||
"params": [
|
||||
"x"
|
||||
],
|
||||
"line_number": 26
|
||||
},
|
||||
{
|
||||
"variant": "end_block",
|
||||
"value": "}",
|
||||
"line_number": 27
|
||||
}
|
||||
]
|
Loading…
Reference in new issue