```plantuml @startuml !theme plain top to bottom direction skinparam linetype ortho class ASTGenerator { + ASTGenerator(): + generateMethod(MethContext): Method + getType(TypeContext): Type? + getType(ReturntypeContext): Type? + generateFieldVariable(FieldContext): Declaration + generateParameter(ParamContext): Parameter + generateConstructor(ConstructorContext): Constructor + generateAST(ClassContext, CollectingErrorListener): Class } class BlockGenerator { + BlockGenerator(CollectingErrorListener): + visitBlock(BlockContext): Block } class ExpressionGenerator { + ExpressionGenerator(CollectingErrorListener): + visitMethodCall(MethodCallContext): Expression + generateOperator(BinaryOpContext, CollectingErrorListener): Operator? + generateRecursiveOwnerChain(List, Expression, Boolean, CollectingErrorListener): Expression? + visitExpression(ExpressionContext): Expression + visitConstant(ConstantContext): Expression + generateConstant(LiteralContext, CollectingErrorListener): Expression? + visitIdentifier(IdentifierContext): Expression + visitStatementExpressionexpr(StatementExpressionexprContext): Expression + generateBinary(BinaryOperationContext, CollectingErrorListener): Binary - pointBeforeLineLogic(BinaryOperationContext, Binary): Binary + visitUnaryOperation(UnaryOperationContext): Expression + visitBinaryOperation(BinaryOperationContext): Expression + visitNew(NewContext): Expression } class StatementGenerator { + StatementGenerator(CollectingErrorListener): + visitPrint(PrintContext): List + visitAssignment(AssignmentContext): List + visitDoWhile(DoWhileContext): List + visitWhile(WhileContext): List + resolveFancyAssign(AssignSignContext, FieldVarAccess, Expression, CollectingErrorListener): Expression? + visitLocalVarDec(LocalVarDecContext): List + visitStatementExpressionstmt(StatementExpressionstmtContext): List + visitIf(IfContext): List + visitLocalVarDecWithInitialization(LocalVarDecWithInitializationContext): List + visitBreak(BreakContext): List - generateField(FieldVarAccessContext): FieldVarAccess + visitMethodCall(MethodCallContext): List + visitNew(NewContext): List + generateNew(NewCallContext, CollectingErrorListener): New + visitFor(ForContext): List - generateAssign(AssignContext): Assignment + visitContinue(ContinueContext): List } @enduml ```