@composita/compiler
Version:
Composita language compiler.
521 lines (492 loc) • 21.8 kB
text/typescript
import { ProgramNode } from './program';
import { ComponentNode, ComponentBodyNode } from './component';
import {
ProcedureCallNode,
StatementNode,
AssignmentNode,
NewNode,
ConnectNode,
DisconnectNode,
SendNode,
ReceiveNode,
DeleteNode,
MoveNode,
AwaitNode,
ReturnNode,
IfNode,
WhileNode,
RepeatNode,
ForNode,
ForeachNode,
StatementBlockNode,
ElseIfNode,
} from './statement';
import { AttributeNode } from './attribute';
import { NameNode, IndexedNameNode } from './name';
import { InterfaceNode, ProtocolExpressionNode, ProtocolTermNode, ProtocolNode } from './interface';
import { ParameterNode } from './parameter';
import {
ExpressionNode,
AttributedExpressionNode,
UnaryExpressionNode,
BinaryExpressionNode,
OffersRequiresExpressionNode,
TypeCheckExpressionNode,
} from './expression';
import { TypeNode, BasicTypeNode, AnyTypeNode } from './type';
import { DeclarationNode } from './declaration';
import { ProcedureNode, ProcedureParameterNode } from './procedure';
import { VariableNode, VariableListNode } from './variable';
import { ImplementationNode } from './implementation';
import {
BasicDesignatorNode,
BasicExpressionDesignatorNode,
DesignatorTypeNode,
BaseTargetDesignatorNode,
DesignatorNode,
} from './designator';
import {
FunctionCallNode,
NumberNode,
ConstantCharacterNode,
TextNode,
InputTestNode,
ReceiveTestNode,
ExistsTestNode,
OperandNode,
RealNumberNode,
IntegerNumberNode,
} from './operand';
import { UnaryFactorNode, ExpressionFactorNode, FactorNode } from './factor';
import { TermNode, FactorChainNode, RightFactorNode } from './term';
import { RightTermNode, TermChainNode, UnaryTermNode, SimpleExpressionNode } from './simple-expression';
import { CardinalityNode } from './cardinality';
import { OfferedInterfaceNode, RequiredInterfaceNode, InterfaceDeclarationNode } from './interface-declaration';
import {
ProtocolFactorNode,
MessageDeclarationNode,
ProtocolFactorExpressionNode,
GroupProtocolExpressionNode,
RepeatingProtocolExpressionNode,
OptionalProtocolExpressionNode,
} from './protocol-factor';
import { StatementSequenceNode } from './statement-sequence';
import { ConstantListNode, ConstantNode, ConstantExpressionNode } from './constant';
export abstract class Visitor {
visitProtocolFactor(node: ProtocolFactorNode): void {
if (node instanceof MessageDeclarationNode) {
this.visitMessageDeclaration(node);
return;
}
if (node instanceof ProtocolFactorExpressionNode) {
this.visitProtocolFactorExpression(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitMessageDeclaration(_node: MessageDeclarationNode): void {}
visitProtocolFactorExpression(node: ProtocolFactorExpressionNode): void {
if (node instanceof OptionalProtocolExpressionNode) {
this.visitOptionalProtocolFactorExpression(node);
return;
}
if (node instanceof RepeatingProtocolExpressionNode) {
this.visitRepeatingProtocolFactorExpression(node);
return;
}
if (node instanceof GroupProtocolExpressionNode) {
this.visitGroupProtocolFactorExpression(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitOptionalProtocolFactorExpression(_node: OptionalProtocolExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitGroupProtocolFactorExpression(_node: GroupProtocolExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRepeatingProtocolFactorExpression(_node: RepeatingProtocolExpressionNode): void {}
visitType(node: TypeNode): void {
if (node instanceof BasicTypeNode) {
this.visitBasicType(node);
return;
}
if (node instanceof AnyTypeNode) {
this.visitAnyType(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitBasicType(_node: BasicTypeNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitAnyType(_node: AnyTypeNode): void {}
visitDesignator(node: DesignatorNode): void {
if (node instanceof BasicDesignatorNode) {
this.visitBasicDesignator(node);
return;
}
if (node instanceof BasicExpressionDesignatorNode) {
this.visitBasicExpressionDesignator(node);
return;
}
if (node instanceof BaseTargetDesignatorNode) {
this.visitBaseTargetDesignator(node);
return;
}
if (node instanceof DesignatorTypeNode) {
this.visitDesignatorType(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitBasicDesignator(_node: BasicDesignatorNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitBasicExpressionDesignator(_node: BasicExpressionDesignatorNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitBaseTargetDesignator(_node: BaseTargetDesignatorNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitDesignatorType(_node: DesignatorTypeNode): void {}
visitInterfaceDeclaration(node: InterfaceDeclarationNode): void {
if (node instanceof OfferedInterfaceNode) {
this.visitOfferedInterface(node);
return;
}
if (node instanceof RequiredInterfaceNode) {
this.visitRequiredInterfface(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitOfferedInterface(_node: OfferedInterfaceNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRequiredInterfface(_node: RequiredInterfaceNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitName(_node: NameNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitIndexedName(_node: IndexedNameNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitCardinality(_node: CardinalityNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProgram(_node: ProgramNode): void {}
visitDeclaration(node: DeclarationNode): void {
if (node instanceof ComponentNode) {
this.visitComponent(node);
return;
}
if (node instanceof InterfaceNode) {
this.visitInterface(node);
return;
}
if (node instanceof ConstantListNode) {
this.visitConstantList(node);
return;
}
if (node instanceof VariableListNode) {
this.visitVariableList(node);
return;
}
if (node instanceof ProcedureNode) {
this.visitProcedure(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitComponent(_node: ComponentNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitInterface(_node: InterfaceNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitConstantList(_node: ConstantListNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitVariableList(_node: VariableListNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProcedure(_node: ProcedureNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProcedureParameter(_node: ProcedureParameterNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitComponentBody(_node: ComponentBodyNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitImplementation(_node: ImplementationNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProtocol(_node: ProtocolNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProtocolExpression(_node: ProtocolExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProtocolTerm(_node: ProtocolTermNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitAttribute(_node: AttributeNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitStatementSequence(_node: StatementSequenceNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitParameter(_node: ParameterNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitConstant(_node: ConstantNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitConstantExpression(_node: ConstantExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitVariable(_node: VariableNode): void {}
visitStatement(node: StatementNode): void {
if (node instanceof ProcedureCallNode) {
this.visitProcedureCall(node);
return;
}
if (node instanceof AssignmentNode) {
this.visitAssignment(node);
return;
}
if (node instanceof NewNode) {
this.visitNew(node);
return;
}
if (node instanceof ConnectNode) {
this.visitConnect(node);
return;
}
if (node instanceof DisconnectNode) {
this.visitDisconnect(node);
return;
}
if (node instanceof SendNode) {
this.visitSend(node);
return;
}
if (node instanceof ReceiveNode) {
this.visitReceive(node);
return;
}
if (node instanceof DeleteNode) {
this.visitDelete(node);
return;
}
if (node instanceof MoveNode) {
this.visitMove(node);
return;
}
if (node instanceof AwaitNode) {
this.visitAwait(node);
return;
}
if (node instanceof ReturnNode) {
this.visitReturn(node);
return;
}
if (node instanceof IfNode) {
this.visitIf(node);
return;
}
if (node instanceof ElseIfNode) {
this.visitElseIf(node);
return;
}
if (node instanceof WhileNode) {
this.visitWhile(node);
return;
}
if (node instanceof RepeatNode) {
this.visitRepeat(node);
return;
}
if (node instanceof ForNode) {
this.visitFor(node);
return;
}
if (node instanceof ForeachNode) {
this.visitForeach(node);
return;
}
if (node instanceof StatementBlockNode) {
this.visitStatementBlock(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitProcedureCall(_node: ProcedureCallNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitAssignment(_node: AssignmentNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitNew(_node: NewNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitConnect(_node: ConnectNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitDisconnect(_node: DisconnectNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitSend(_node: SendNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitReceive(_node: ReceiveNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitDelete(_node: DeleteNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitMove(_node: MoveNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitAwait(_node: AwaitNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitReturn(_node: ReturnNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitIf(_node: IfNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitElseIf(_node: ElseIfNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitWhile(_node: WhileNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRepeat(_node: RepeatNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitFor(_node: ForNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitForeach(_node: ForeachNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitStatementBlock(_node: StatementBlockNode): void {}
visitExpression(node: ExpressionNode): void {
if (node instanceof SimpleExpressionNode) {
this.visitSimpleExpression(node);
return;
}
if (node instanceof AttributedExpressionNode) {
this.visitAttributedExpression(node);
return;
}
}
visitAttributedExpression(node: AttributedExpressionNode): void {
if (node instanceof SimpleExpressionNode) {
this.visitSimpleExpression(node);
return;
}
if (node instanceof UnaryExpressionNode) {
this.visitUnaryExpression(node);
return;
}
if (node instanceof BinaryExpressionNode) {
this.visitBinaryExpression(node);
return;
}
if (node instanceof OffersRequiresExpressionNode) {
this.visitOffersRequiresExpression(node);
return;
}
if (node instanceof TypeCheckExpressionNode) {
this.visitTypeCheck(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitUnaryExpression(_node: UnaryExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitBinaryExpression(_node: BinaryExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitOffersRequiresExpression(_node: OffersRequiresExpressionNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitTypeCheck(_node: TypeCheckExpressionNode): void {}
visitSimpleExpression(node: SimpleExpressionNode): void {
if (node instanceof UnaryTermNode) {
this.visitUnaryTermNode(node);
return;
}
if (node instanceof TermChainNode) {
this.visitTermChain(node);
return;
}
if (node instanceof TermNode) {
this.visitTerm(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitUnaryTermNode(_node: UnaryTermNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitTermChain(_node: TermChainNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRightTerm(_node: RightTermNode): void {}
visitTerm(node: TermNode): void {
if (node instanceof FactorNode) {
this.visitFactor(node);
return;
}
if (node instanceof FactorChainNode) {
this.visitFactorChain(node);
return;
}
if (node instanceof RightFactorNode) {
this.visitRightFactor(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitFactorChain(_node: FactorChainNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRightFactor(_node: RightFactorNode): void {}
visitFactor(node: FactorNode): void {
if (node instanceof UnaryFactorNode) {
this.visitUnaryFactor(node);
return;
}
if (node instanceof ConstantCharacterNode) {
this.visitConstantCharacter(node);
return;
}
if (node instanceof OperandNode) {
this.visitOperand(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitUnaryFactor(_node: UnaryFactorNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitExpressionFactor(_node: ExpressionFactorNode): void {}
visitOperand(node: OperandNode): void {
if (node instanceof NumberNode) {
this.visitNumber(node);
return;
}
if (node instanceof ConstantCharacterNode) {
this.visitConstantCharacter(node);
return;
}
if (node instanceof TextNode) {
this.visitText(node);
return;
}
if (node instanceof ReceiveTestNode) {
this.visitReceiveTest(node);
return;
}
if (node instanceof InputTestNode) {
this.visitInputTest(node);
return;
}
if (node instanceof ExistsTestNode) {
this.visitExistsTest(node);
return;
}
if (node instanceof FunctionCallNode) {
this.visitFunctionCall(node);
return;
}
if (node instanceof DesignatorNode) {
this.visitDesignator(node);
return;
}
}
visitNumber(node: NumberNode): void {
if (node instanceof IntegerNumberNode) {
this.visitIntegerNumber(node);
return;
}
if (node instanceof RealNumberNode) {
this.visitRealNumber(node);
return;
}
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitIntegerNumber(_node: IntegerNumberNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitRealNumber(_node: RealNumberNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitConstantCharacter(_node: ConstantCharacterNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitText(_node: TextNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitReceiveTest(_node: ReceiveTestNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitInputTest(_node: InputTestNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitExistsTest(_node: ExistsTestNode): void {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
visitFunctionCall(_node: FunctionCallNode): void {}
}