diff options
Diffstat (limited to 'compilador/astree/type.py')
-rw-r--r-- | compilador/astree/type.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/compilador/astree/type.py b/compilador/astree/type.py index 5389702..b254b91 100644 --- a/compilador/astree/type.py +++ b/compilador/astree/type.py @@ -1,7 +1,11 @@ +import uuid +import graphviz as gv +from pprint import pformat from dataclasses import dataclass from typing import List from enum import Enum +from astree.graphable import Graphable from tabla import Token Type = None @@ -14,16 +18,40 @@ class BuiltinType(Enum): INT = Token.INT VOID = Token.VOID + def __str__(self): + return self.value.value + # A parameter to a function type. @dataclass -class FuncParam: +class FuncParam(Graphable): name: str _type: Type + def graph(self, dot: gv.Digraph, parent: str = None, edge: str = None) -> None: + name = uuid.uuid1().hex + dot.node(name, 'FuncParam') + dot.edge(parent, name, label = edge) + name_name = uuid.uuid1().hex + dot.node(name_name, self.name) + dot.edge(name, name_name, 'name') + name_type = uuid.uuid1().hex + dot.node(name_type, str(self._type)) + dot.edge(name, name_type, 'type') + # funcion vacio ... (a: int, b: int ...) @dataclass -class FuncType: +class FuncType(Graphable): result: Type params: List[FuncParam] + def graph(self, dot: gv.Digraph, parent: str = None, edge: str = None) -> None: + name = uuid.uuid1().hex + dot.node(name, 'FuncType') + dot.edge(parent, name, label = edge) + name_result = uuid.uuid1().hex + dot.node(name_result, str(self.result)) + dot.edge(name, name_result, 'result') + for p in self.params: + p.graph(dot, name, 'param') + Type = BuiltinType |