import { Node, AbstractVisitor, Program, VariableDeclarations, VariableDeclarator, Monitor, ProcedureDeclaration, ConditionDeclaration, MainAgent, ProcedureParameter, Struct, VariableInitializer, IfStatement, BreakStatement, Case, ConditionStatement, ContinueStatement, DoStatement, ForInit, ForStatement, PrimitiveStatement, PrintStatement, ReturnStatement, SelectStatement, StatementBlock, StatementExpression, StatementWrapper, WhileStatement, AssignDestination, Expression, TypeNode } from "@pseuco/lang"; import { TypeEnvironment } from "./environments/TypeEnvironment"; import { TypeCheckCoordinator } from "./TypeCheckCoordinator"; export declare class TypeEnvironmentVisitor extends AbstractVisitor { readonly coordinator: TypeCheckCoordinator; private constructor(); static getEnvironmentForProgram(coordinator: TypeCheckCoordinator, program: Program): Map; private readonly result; private rootEnvironment; private currentEnvironment; private go; private executeInNewBlockEnvironment; /***************************** **** DECLARATIONS *********** *****************************/ visitProgram(node: Program): void; visitVariableDeclarations(node: VariableDeclarations): void; visitVariableDeclarator(node: VariableDeclarator): void; visitVariableInitializer(node: VariableInitializer): void; visitMonitor(node: Monitor): void; visitStruct(node: Struct): void; visitProcedureDeclaration(node: ProcedureDeclaration): void; visitProcedureParameter(node: ProcedureParameter): void; visitConditionDeclaration(node: ConditionDeclaration): void; visitMainAgent(node: MainAgent): void; /***************************** **** STATEMENTS ************* *****************************/ visitIfStatement(node: IfStatement): void; visitBreakStatement(node: BreakStatement): void; visitCase(node: Case): void; visitConditionStatement(node: ConditionStatement): void; visitContinueStatement(node: ContinueStatement): void; visitDoStatement(node: DoStatement): void; visitForInit(node: ForInit): void; visitForStatement(node: ForStatement): void; visitPrimitiveStatement(node: PrimitiveStatement): void; visitPrintStatement(node: PrintStatement): void; visitReturnStatement(node: ReturnStatement): void; visitSelectStatement(node: SelectStatement): void; visitStatementBlock(node: StatementBlock): void; visitStatementExpression(node: StatementExpression): void; visitStatementWrapper(node: StatementWrapper): void; visitWhileStatement(node: WhileStatement): void; /***************************** **** EXPRESSIONS ************* *****************************/ visitAssignDestination(node: AssignDestination): void; private visitExpression; visitAdditiveExpression: (node: Expression) => void; visitAndExpression: (node: Expression) => void; visitArrayExpression: (node: Expression) => void; visitAssignExpression: (node: Expression) => void; visitClassCall: (node: Expression) => void; visitConditionalExpression: (node: Expression) => void; visitEqualityExpression: (node: Expression) => void; visitIdentifierExpression: (node: Expression) => void; visitLiteralExpression: (node: Expression) => void; visitMultiplicativeExpression: (node: Expression) => void; visitOrExpression: (node: Expression) => void; visitPostfixExpression: (node: Expression) => void; visitProcedureCall: (node: Expression) => void; visitReceiveExpression: (node: Expression) => void; visitRelationalExpression: (node: Expression) => void; visitSendExpression: (node: Expression) => void; visitStartExpression: (node: Expression) => void; visitUnaryExpression: (node: Expression) => void; /***************************** **** TYPE NODES ************** *****************************/ private visitTypeNode; visitArrayTypeNode: (node: TypeNode) => void; visitChannelTypeNode: (node: TypeNode) => void; visitClassTypeNode: (node: TypeNode) => void; visitSimpleTypeNode: (node: TypeNode) => void; }