diff options
author | Iván Ávalos <avalos@disroot.org> | 2022-11-25 21:29:55 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2022-11-25 21:29:55 -0600 |
commit | 6b27930ef9c3eaede8d0c283ffa8376c40145f80 (patch) | |
tree | e2f2f8a25defb68283910edea33768054f435bc9 /compilador/astree/type.py | |
parent | 4b2fad150a292f882cee408d7f9746715225f7cb (diff) | |
download | javanol-6b27930ef9c3eaede8d0c283ffa8376c40145f80.tar.gz javanol-6b27930ef9c3eaede8d0c283ffa8376c40145f80.tar.bz2 javanol-6b27930ef9c3eaede8d0c283ffa8376c40145f80.zip |
¡Otra vez hay renderizador de AST!
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 |