Files
boring-lang/boring/main.py

54 lines
2.0 KiB
Python
Raw Normal View History

2021-05-05 19:32:55 -06:00
import sys
from typing import List
from boring.parse import boring_parser, TreeToBoring, pretty_print
2021-05-30 09:57:41 -06:00
from boring.type_checking import TypeChecker, Context
2021-06-13 10:38:13 -06:00
from boring.type_alias_resolution import TypeAliasResolver, Context as AliasContex
2021-06-11 20:59:51 -06:00
from boring import typedefs, parse
builtins = {
"U8": parse.PrimitiveTypeDeclaration("U8"),
"U16": parse.PrimitiveTypeDeclaration("U16"),
"U32": parse.PrimitiveTypeDeclaration("U32"),
"U64": parse.PrimitiveTypeDeclaration("U64"),
"U128": parse.PrimitiveTypeDeclaration("U128"),
"I8": parse.PrimitiveTypeDeclaration("I8"),
"I16": parse.PrimitiveTypeDeclaration("I16"),
"I32": parse.PrimitiveTypeDeclaration("I32"),
"I64": parse.PrimitiveTypeDeclaration("I64"),
"I128": parse.PrimitiveTypeDeclaration("I128"),
"F32": parse.PrimitiveTypeDeclaration("F32"),
"F64": parse.PrimitiveTypeDeclaration("F64"),
"F128": parse.PrimitiveTypeDeclaration("F128"),
"()": parse.PrimitiveTypeDeclaration("()"), # Unit
"!": parse.PrimitiveTypeDeclaration("!"), # Never
}
2021-05-05 19:32:55 -06:00
if __name__ == "__main__":
with open(sys.argv[1]) as f:
tree = boring_parser.parse(f.read())
# print(tree)
result = TreeToBoring().transform(tree)
2021-05-12 06:40:11 -06:00
# pretty_print(result)
2021-06-13 10:38:13 -06:00
alias_resolver = TypeAliasResolver()
alias_resolver.with_module(AliasContex([]), result)
2021-06-16 11:52:40 -06:00
# pretty_print(result)
2021-05-12 06:40:11 -06:00
type_checker = TypeChecker()
2021-06-26 17:47:52 -06:00
while type_checker.with_module(Context(builtins, None, result), result):
2021-05-28 23:57:07 -06:00
print("loop")
2021-05-12 06:40:11 -06:00
# type_checker.with_module({}, result)
2021-05-05 19:32:55 -06:00
pretty_print(result)
2021-05-12 06:40:11 -06:00
# tctb = TypeCheckTableBuilder()
# table: List[TypeComparison] = []
# tctb.with_module({}, table, result)
# for e in table:
# print(e)
# print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
# check_types(table)
# print("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv")
# for e in table:
# print(e)
2021-05-05 19:32:55 -06:00
# None, Some
# None skip, set
# Some set, check