sammine-lang
Loading...
Searching...
No Matches
include
semantics
ScopeGeneratorVisitor.h
Go to the documentation of this file.
1
#pragma once
2
#include "
ast/Ast.h
"
3
#include "
ast/AstBase.h
"
4
#include "
util/LexicalContext.h
"
5
#include "
util/Utilities.h
"
6
namespace
sammine_lang::AST {
7
11
class
ScopeGeneratorVisitor :
public
ScopedASTVisitor
{
12
public
:
13
// A simple scoping class, doesn't differentiate between different names, like
14
// variable name, func name and all that
15
LexicalStack<sammine_util::Location>
scope_stack;
16
ScopeGeneratorVisitor() { scope_stack.push_context(); }
17
18
// INFO: CheckAndReg means: Check if there's redefinition, if not, register
19
// INFO: Check for castable means: Check if the name existed, if not, register
20
21
virtual
void
enter_new_scope()
override
{ this->scope_stack.push_context(); }
22
virtual
void
exit_new_scope()
override
{ this->scope_stack.pop_context(); }
23
24
// pre order
25
26
// INFO: Nothing here
27
virtual
void
preorder_walk(
ProgramAST
*ast)
override
;
28
29
// INFO: CheckAndReg variable name
30
virtual
void
preorder_walk(
VarDefAST
*ast)
override
;
31
32
// INFO: CheckAndReg extern name
33
virtual
void
preorder_walk(
ExternAST
*ast)
override
;
34
// INFO: CheckAndReg function name, enter new block
35
virtual
void
preorder_walk(
FuncDefAST
*ast)
override
;
36
virtual
void
preorder_walk(
RecordDefAST
*ast)
override
;
37
// INFO: CheckAndReg all variable name, which should only clash if you have
38
// the same names in prototype
39
virtual
void
preorder_walk(
PrototypeAST
*ast)
override
;
40
// INFO: Check
41
virtual
void
preorder_walk(
CallExprAST
*ast)
override
;
42
virtual
void
preorder_walk(
ReturnExprAST
*ast)
override
;
43
virtual
void
preorder_walk(
BinaryExprAST
*ast)
override
;
44
virtual
void
preorder_walk(
NumberExprAST
*ast)
override
;
45
virtual
void
preorder_walk(
StringExprAST
*ast)
override
;
46
virtual
void
preorder_walk(
BoolExprAST
*ast)
override
;
47
48
// INFO: Check
49
virtual
void
preorder_walk(
VariableExprAST
*ast)
override
;
50
virtual
void
preorder_walk(
BlockAST
*ast)
override
;
51
virtual
void
preorder_walk(
IfExprAST
*ast)
override
;
52
virtual
void
preorder_walk(
UnitExprAST
*ast)
override
;
53
virtual
void
preorder_walk(
TypedVarAST
*ast)
override
;
54
55
// post order
56
virtual
void
postorder_walk(
ProgramAST
*ast)
override
;
57
virtual
void
postorder_walk(
VarDefAST
*ast)
override
;
58
virtual
void
postorder_walk(
ExternAST
*ast)
override
;
59
// INFO: Pop the scope
60
virtual
void
postorder_walk(
FuncDefAST
*ast)
override
;
61
virtual
void
postorder_walk(
RecordDefAST
*ast)
override
;
62
virtual
void
postorder_walk(
PrototypeAST
*ast)
override
;
63
virtual
void
postorder_walk(
CallExprAST
*ast)
override
;
64
virtual
void
postorder_walk(
ReturnExprAST
*ast)
override
;
65
virtual
void
postorder_walk(
BinaryExprAST
*ast)
override
;
66
virtual
void
postorder_walk(
NumberExprAST
*ast)
override
;
67
virtual
void
postorder_walk(
StringExprAST
*ast)
override
;
68
virtual
void
postorder_walk(
BoolExprAST
*ast)
override
;
69
virtual
void
postorder_walk(
VariableExprAST
*ast)
override
;
70
virtual
void
postorder_walk(
BlockAST
*ast)
override
;
71
virtual
void
postorder_walk(
IfExprAST
*ast)
override
;
72
virtual
void
postorder_walk(
UnitExprAST
*ast)
override
;
73
virtual
void
postorder_walk(
TypedVarAST
*ast)
override
;
74
};
75
76
}
// namespace sammine_lang::AST
AstBase.h
Defines the AST Abstract class for printing out AST Nodes.
Ast.h
Defined the AST Node classes (ProgramAST, RecordDefAST, FuncDefAST) and a visitor interface for trave...
LexicalContext.h
A simple scoping class, doesn't differentiate between different names, like variable name,...
Utilities.h
Holds classes and functionalities for dealing with Error handling, source locations caching & indexin...
sammine_lang::AST::BinaryExprAST
Definition
Ast.h:319
sammine_lang::AST::BlockAST
An AST to simulate a { } code block.
Definition
Ast.h:158
sammine_lang::AST::BoolExprAST
Definition
Ast.h:301
sammine_lang::AST::CallExprAST
Definition
Ast.h:375
sammine_lang::AST::ExternAST
A Function Definition that has the prototype and definition in terms of a block.
Definition
Ast.h:129
sammine_lang::AST::FuncDefAST
Definition
Ast.h:175
sammine_lang::AST::IfExprAST
Definition
Ast.h:432
sammine_lang::AST::LexicalStack
Definition
AstBase.h:110
sammine_lang::AST::NumberExprAST
Definition
Ast.h:258
sammine_lang::AST::ProgramAST
Definition
Ast.h:24
sammine_lang::AST::PrototypeAST
A prototype to present "func func_name(...) -> type;".
Definition
Ast.h:76
sammine_lang::AST::RecordDefAST
Definition
Ast.h:202
sammine_lang::AST::ReturnExprAST
Definition
Ast.h:343
sammine_lang::AST::ScopedASTVisitor
Definition
AstBase.h:145
sammine_lang::AST::StringExprAST
Definition
Ast.h:279
sammine_lang::AST::TypedVarAST
Definition
Ast.h:40
sammine_lang::AST::UnitExprAST
Definition
Ast.h:406
sammine_lang::AST::VarDefAST
A variable definition: "var x = expression;".
Definition
Ast.h:231
sammine_lang::AST::VariableExprAST
Definition
Ast.h:458
Generated by
1.13.2