Skip to content
This repository was archived by the owner on Feb 14, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
5 changes: 5 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"python.linting.pylintEnabled": true,
"python.linting.prospectorEnabled": false,
"python.linting.enabled": true
}
Binary file added src/INFORME DEL PROYECTO DE COMPILACION.pdf
Binary file not shown.
166 changes: 166 additions & 0 deletions src/ast_hierarchy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
class Node:
def __init__(self, line_number):
self.lineNumber = line_number

def getLineNumber(self):
return 0 if len(self.lineNumber) != 1 else self.lineNumber[0][0]

def getColumnNumber(self):
return 0 if len(self.lineNumber) != 1 else self.lineNumber[0][1]

class ProgramNode(Node):
def __init__(self, classes, line_number):
super().__init__(line_number)
self.classes = classes

class ClassNode(Node):
def __init__(self, type_name, features, father_type_name, line_number):
super().__init__(line_number)
self.typeName = type_name
self.features = features
self.fatherTypeName = father_type_name

class FeatureNode(Node):
pass

class AttributeFeatureNode(FeatureNode):
def __init__(self, attr_id, type_name, expression, line_number):
super().__init__(line_number)
self.id = attr_id
self.typeName = type_name
self.expression = expression

class FunctionFeatureNode(FeatureNode):
def __init__(self, func_id, parameters, type_name, statement, line_number):
super().__init__(line_number)
self.id = func_id
self.parameters = parameters
self.typeName = type_name
self.statements = statement

class ParameterNode(Node):
def __init__(self, param_id, type_name, line_number):
super().__init__(line_number)
self.id = param_id
self.typeName = type_name

class StatementNode(Node):
pass

class AssignStatementNode(StatementNode):
def __init__(self, assign_id, expression, line_number):
super().__init__(line_number)
self.id = assign_id
self.expression = expression

class ConditionalStatementNode(StatementNode):
def __init__(self, eval_expr, if_expr, else_expr, line_number):
super().__init__(line_number)
self.evalExpr = eval_expr
self.ifExpr = if_expr
self.elseExpr = else_expr

class LoopStatementNode(StatementNode):
def __init__(self, eval_expr, loop_expr, line_number):
super().__init__(line_number)
self.evalExpr = eval_expr
self.loopExpr = loop_expr

class BlockStatementNode(StatementNode):
def __init__(self, expressions, line_number):
super().__init__(line_number)
self.expressions = expressions

class LetStatementNode(StatementNode):
def __init__(self, variables, expression, line_number):
super().__init__(line_number)
self.variables = variables
self.expression = expression

class CaseStatementNode(StatementNode):
def __init__(self, expression, body, line_number):
super().__init__(line_number)
self.expression = expression
self.body = body

class CaseBranchNode(StatementNode):
def __init__(self, case_id, type_name, expression, line_number):
super().__init__(line_number)
self.id = case_id
self.typeName = type_name
self.expression = expression

class NewStatementNode(StatementNode):
def __init__(self, type_name, line_number):
super().__init__(line_number)
self.typeName = type_name

class FunctionCallStatement(StatementNode):
def __init__(self, instance, dispatch_type, function, args, line_number):
super().__init__(line_number)
self.instance = instance
self.dispatchType = dispatch_type
self.function = function
self.args = args
self.instance_type = ""

class ExpressionNode(Node):
pass

class AtomicNode(ExpressionNode):
def __init__(self, lex, line_number):
super().__init__(line_number)
self.lex = lex

class UnaryNode(ExpressionNode):
def __init__(self, expression, line_number):
super().__init__(line_number)
self.expression = expression

class BinaryNode(ExpressionNode):
def __init__(self, left, right, line_number):
super().__init__(line_number)
self.left = left
self.right = right

class ConstantNumericNode(AtomicNode):
pass

class ConstantStringNode(AtomicNode):
pass

class ConstantBoolNode(AtomicNode):
pass

class VariableNode(AtomicNode):
pass

class NotNode(UnaryNode):
pass

class IsVoidNode(UnaryNode):
pass

class ComplementNode(UnaryNode):
pass

class LessEqualNode(BinaryNode):
pass

class LessNode(BinaryNode):
pass

class EqualNode(BinaryNode):
pass

class PlusNode(BinaryNode):
pass

class MinusNode(BinaryNode):
pass

class TimesNode(BinaryNode):
pass

class DivideNode(BinaryNode):
pass
Loading