mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-25 16:28:45 +00:00
grammar refactoring: base visitor class fixed
This commit is contained in:
parent
ff893d3ebd
commit
77c7ac0b2f
3 changed files with 112 additions and 155 deletions
176
src/visitor.cpp
176
src/visitor.cpp
|
|
@ -11,30 +11,24 @@ void Visitor::Visit(SourceStatement& node) {
|
|||
Visit(std::get<std::unique_ptr<ImportStatement>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<UsageDefinition>>(node).get());
|
||||
Visit(std::get<std::unique_ptr<AliasDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(std::get<std::unique_ptr<AliasDefinition>>(node).get());
|
||||
break;
|
||||
case 3:
|
||||
Visit(std::get<std::unique_ptr<VariableDefinition>>(node).get());
|
||||
break;
|
||||
case 4:
|
||||
Visit(std::get<std::unique_ptr<FunctionDeclaration>>(node).get());
|
||||
break;
|
||||
case 3:
|
||||
Visit(std::get<std::unique_ptr<FunctionDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 4:
|
||||
Visit(std::get<std::unique_ptr<TypeDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 5:
|
||||
Visit(std::get<std::unique_ptr<FunctionDefinition>>(node).get());
|
||||
Visit(std::get<std::unique_ptr<AbstractTypeDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 6:
|
||||
Visit(std::get<std::unique_ptr<AliasTypeDefinition>>(node).get());
|
||||
Visit(std::get<std::unique_ptr<TypeclassDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 7:
|
||||
Visit(std::get<std::unique_ptr<TypeDefinition>>(node).get());
|
||||
break;
|
||||
case 8:
|
||||
Visit(std::get<std::unique_ptr<TypeclassDefinition>>(node).get());
|
||||
break;
|
||||
case 9:
|
||||
Visit(std::get<std::unique_ptr<Namespace>>(node).get());
|
||||
break;
|
||||
default:
|
||||
|
|
@ -43,45 +37,6 @@ void Visitor::Visit(SourceStatement& node) {
|
|||
}
|
||||
}
|
||||
|
||||
void Visitor::Visit(ImportSymbol& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<TypeclassExpression>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(std::get<std::unique_ptr<NameExpression>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Definition parts
|
||||
|
||||
void Visitor::Visit(FunctionDeclarationType& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<TupleType>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(std::get<std::unique_ptr<VariantType>>(node).get());
|
||||
break;
|
||||
case 3:
|
||||
Visit(std::get<std::unique_ptr<ParametrizedTypeclass>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Flow control -----------------
|
||||
|
||||
void Visitor::Visit(FlowControl& node) {
|
||||
|
|
@ -112,10 +67,32 @@ void Visitor::Visit(FlowControl& node) {
|
|||
|
||||
// Statements, expressions, blocks, etc. -----------------
|
||||
|
||||
void Visitor::Visit(BlockStatement& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(*std::get<std::unique_ptr<Expression>>(node));
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<VariableDefinitionStatement>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(*std::get<std::unique_ptr<FlowControl>>(node));
|
||||
break;
|
||||
case 3:
|
||||
Visit(*std::get<std::unique_ptr<PrefixedExpression>>(node));
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void Visitor::Visit(SubExpressionToken& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<NameSuperExpression>>(node).get());
|
||||
Visit(std::get<std::unique_ptr<NameExpression>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<ScopedStatement>>(node).get());
|
||||
|
|
@ -137,6 +114,12 @@ void Visitor::Visit(SubExpression& node) {
|
|||
case 2:
|
||||
Visit(*std::get<std::unique_ptr<SubExpressionToken>>(node));
|
||||
break;
|
||||
case 3:
|
||||
Visit(std::get<std::unique_ptr<ArrayExpression>>(node).get());
|
||||
break;
|
||||
case 4:
|
||||
Visit(std::get<std::unique_ptr<ReferenceExpression>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
|
|
@ -203,31 +186,6 @@ void Visitor::Visit(SuperExpression& node) {
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void Visitor::Visit(BlockStatement& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(*std::get<std::unique_ptr<Expression>>(node));
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<AliasDefinition>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(std::get<std::unique_ptr<VariableDefinition>>(node).get());
|
||||
break;
|
||||
case 3:
|
||||
Visit(*std::get<std::unique_ptr<FlowControl>>(node));
|
||||
break;
|
||||
case 4:
|
||||
Visit(*std::get<std::unique_ptr<PrefixedExpression>>(node));
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Simple Expressions
|
||||
|
||||
void Visitor::Visit(FunctionArgument& node) {
|
||||
|
|
@ -263,6 +221,8 @@ void Visitor::Visit(AnyName& node) {
|
|||
}
|
||||
}
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
// Type
|
||||
|
||||
void Visitor::Visit(AnyType& node) { // Or ScopedAnyType
|
||||
|
|
@ -276,6 +236,41 @@ void Visitor::Visit(AnyType& node) { // Or ScopedAnyType
|
|||
case 2:
|
||||
Visit(std::get<std::unique_ptr<VariantType>>(node).get());
|
||||
break;
|
||||
case 3:
|
||||
Visit(std::get<std::unique_ptr<FunctionType>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Typeclass
|
||||
|
||||
void Visitor::Visit(TypeclassUsage& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<TypeclassExpression>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<ParametrizedTypeclass>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Typeclass & Type
|
||||
|
||||
void Visitor::Visit(TypeParameter& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
|
|
@ -296,25 +291,6 @@ void Visitor::Visit(TypeSubExpression& node) {
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void Visitor::Visit(TypeParameter& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
|
||||
break;
|
||||
case 1:
|
||||
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
|
||||
break;
|
||||
case 2:
|
||||
Visit(*std::get<std::unique_ptr<Expression>>(node));
|
||||
break;
|
||||
default:
|
||||
// error
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Identifiers, constants, etc. -----------------
|
||||
|
||||
void Visitor::Visit(Literal& node) {
|
||||
|
|
@ -339,7 +315,7 @@ void Visitor::Visit(Literal& node) {
|
|||
|
||||
//
|
||||
|
||||
void Visitor::Visit(NameSubSuperExpression& node) {
|
||||
void Visitor::Visit(NameSubExpression& node) {
|
||||
switch (node.index()) {
|
||||
case 0:
|
||||
Visit(std::get<std::unique_ptr<NameIdentifier>>(node).get());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue