Tired covid stuff
This commit is contained in:
parent
ca3ce26369
commit
f7b9cd734a
4 changed files with 145 additions and 8 deletions
10
hello.mn
Normal file
10
hello.mn
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
func: hello(string: x) = {
|
||||||
|
stdout: out = x
|
||||||
|
}
|
||||||
|
|
||||||
|
string: name
|
||||||
|
name = hej hopp
|
||||||
|
|
||||||
|
|
||||||
|
hello(name)
|
||||||
|
|
101
hello.tokens
Normal file
101
hello.tokens
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"variant": "type",
|
||||||
|
"value": "func",
|
||||||
|
"line_number": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": ":",
|
||||||
|
"line_number": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "function_declaration",
|
||||||
|
"value": "hello",
|
||||||
|
"params": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"line_number": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": "=",
|
||||||
|
"line_number": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "start_block",
|
||||||
|
"value": "{",
|
||||||
|
"line_number": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "type",
|
||||||
|
"value": "stdout",
|
||||||
|
"line_number": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": ":",
|
||||||
|
"line_number": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "signifier",
|
||||||
|
"value": "out",
|
||||||
|
"line_number": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": "=",
|
||||||
|
"line_number": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "expression",
|
||||||
|
"value": "x",
|
||||||
|
"line_number": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "end_block",
|
||||||
|
"value": "}",
|
||||||
|
"line_number": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "type",
|
||||||
|
"value": "string",
|
||||||
|
"line_number": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": ":",
|
||||||
|
"line_number": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "signifier",
|
||||||
|
"value": "name",
|
||||||
|
"line_number": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "signifier",
|
||||||
|
"value": "name",
|
||||||
|
"line_number": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "operator",
|
||||||
|
"value": "=",
|
||||||
|
"line_number": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "expression",
|
||||||
|
"value": "hej hopp",
|
||||||
|
"line_number": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variant": "function_call",
|
||||||
|
"value": "hello",
|
||||||
|
"params": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"line_number": 9
|
||||||
|
}
|
||||||
|
]
|
7
lexer.py
7
lexer.py
|
@ -1,11 +1,16 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import json
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
def find(needle: str, haystack: str) -> bool:
|
def find(needle: str, haystack: str) -> bool:
|
||||||
return haystack.find(needle) != -1
|
return haystack.find(needle) != -1
|
||||||
|
|
||||||
source: list = list()
|
source: list = list()
|
||||||
with open('./prog.mn', 'r') as prog:
|
program = './prog.mn'
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
program = sys.argv[1]
|
||||||
|
|
||||||
|
with open(program, 'r') as prog:
|
||||||
source = prog.readlines()
|
source = prog.readlines()
|
||||||
|
|
||||||
num_lines = len(source)
|
num_lines = len(source)
|
||||||
|
|
35
pass1.py
35
pass1.py
|
@ -1,8 +1,12 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import json
|
import json
|
||||||
import operator
|
import operator
|
||||||
|
import sys
|
||||||
tokens = dict()
|
tokens = dict()
|
||||||
with open('./tokens.json', 'r') as json_tokens:
|
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())
|
tokens = json.loads(json_tokens.read())
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,6 +47,17 @@ def collect_body(index: int) -> list:
|
||||||
uncollapsed_tokens.append(collectable)
|
uncollapsed_tokens.append(collectable)
|
||||||
return uncollapsed_tokens
|
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:
|
def collapse_tokens(uncollapsed_tokens: list) -> list:
|
||||||
usefull_tokens = list()
|
usefull_tokens = list()
|
||||||
for index in range(0, len(uncollapsed_tokens)):
|
for index in range(0, len(uncollapsed_tokens)):
|
||||||
|
@ -69,15 +84,21 @@ def collapse_tokens(uncollapsed_tokens: list) -> list:
|
||||||
|
|
||||||
usefull_tokens.append(usefull_token)
|
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'))
|
usefull_tokens.sort(key=operator.itemgetter('line_number'))
|
||||||
return usefull_tokens
|
return usefull_tokens
|
||||||
|
|
||||||
collapsed_tokens = collapse_tokens(tokens)
|
collapsed_tokens = collapse_tokens(tokens)
|
||||||
|
|
||||||
#for index in range(0, len(collapsed_tokens)):
|
for index in range(0, len(collapsed_tokens)):
|
||||||
# token = collapsed_tokens[index]
|
token = collapsed_tokens[index]
|
||||||
# if token['variant'] == 'function_declaration':
|
if token['variant'] == 'function_call':
|
||||||
# old_body = token['body'].copy()
|
function = collect_parameters([token['signifier']], token['line_number'],collapsed_tokens.copy())
|
||||||
# new_body = collapse_tokens(old_body)
|
collapsed_tokens[index]['function'] = function
|
||||||
# collapsed_tokens[index]['body'] = new_body
|
params = collect_parameters(token['params'], token['line_number'],collapsed_tokens.copy())
|
||||||
|
collapsed_tokens[index]['params'] = params
|
||||||
print(json.dumps(collapsed_tokens))
|
print(json.dumps(collapsed_tokens))
|
||||||
|
|
Loading…
Add table
Reference in a new issue