diff options
Diffstat (limited to 'compilador/astree/expr.py')
-rw-r--r-- | compilador/astree/expr.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/compilador/astree/expr.py b/compilador/astree/expr.py new file mode 100644 index 0000000..1bb7f4f --- /dev/null +++ b/compilador/astree/expr.py @@ -0,0 +1,110 @@ +from dataclasses import dataclass +from enum import Enum, auto +from typing import List, Optional + +from astree.type import Type + +Expr = None + +# An assignment expression +# +# a = 10 +@dataclass +class AssignExpr: + _object: Expr + value: Expr + +# A binary arithmetic operator +class BinarithmOp(Enum): + BAND = '&' + BOR = '|' + DIV = '/' + GT = '>' + GTEQ = '>=' + LAND = '&&' + LEQUAL = '==' + LESS = '<' + LESSEQ = '<=' + LOR = '||' + MINUS = '-' + NEQUAL = '!=' + PLUS = '+' + TIMES = '*' + +# A binary arithmetic expression. +# +# a * b +@dataclass +class BinarithmExpr: + op: BinarithmOp + lvalue: Expr + rvalue: Expr + +# A function call expression. +# +# foo(bar) +@dataclass +class CallExpr: + lvalue: Expr + args: List[Expr] + +# A compound expression. +# +# { +# foo; +# bar; +# // ... +# } +@dataclass +class CompoundExpr: + exprs: List[Expr] + +# A scalar value. +Value = bool | str | int | type(None) + +# An integer constant. +@dataclass +class NumberConstant: + value: int + +# A constant expression. +ConstantExpr = Value | NumberConstant + +# A for loop. +# +# porcada (entero a = 0; a < b; a++) {} +@dataclass +class ForExpr: + bindings: Optional[Expr] + cond: Expr + afterthought: Optional[Expr] + body: Expr + +# An if or if..else expression. +# +# si (a) { } sino { } +@dataclass +class IfExpr: + cond: Expr + tbranch: Expr + fbranch: Optional[Expr] + +# A print statement. +# +# imprimir a +PrintExpr = Expr + +# A read statement. +# +# leer a +ReadExpr = Expr + +# A return statement. +# +# return a +ReturnExpr = Optional[Expr] + +# A Javañol expression +Expr = (AssignExpr | BinarithmExpr | CallExpr | ConstantExpr | + ForExpr | IfExpr | CompoundExpr | PrintExpr | + ReadExpr | ReturnExpr) |