sammine-lang
Loading...
Searching...
No Matches
Ast.h File Reference

Defined the AST Node classes (ProgramAST, StructDefAST, FuncDefAST) and a visitor interface for traversing the AST. More...

#include "ast/AstBase.h"
#include "ast/AstDecl.h"
#include "util/QualifiedName.h"
#include "util/Utilities.h"
#include <cassert>
#include <cstddef>
#include <memory>
#include <optional>
#include <string>
#include <vector>
Include dependency graph for Ast.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  sammine_lang::AST::Printable
class  sammine_lang::AST::TypeExprAST
class  sammine_lang::AST::SimpleTypeExprAST
class  sammine_lang::AST::PointerTypeExprAST
class  sammine_lang::AST::ArrayTypeExprAST
class  sammine_lang::AST::FunctionTypeExprAST
class  sammine_lang::AST::GenericTypeExprAST
class  sammine_lang::AST::TupleTypeExprAST
class  sammine_lang::AST::DefinitionAST
struct  sammine_lang::AST::ImportDecl
class  sammine_lang::AST::ProgramAST
class  sammine_lang::AST::TypedVarAST
class  sammine_lang::AST::PrototypeAST
 A prototype to present "func func_name(...) -> type;". More...
class  sammine_lang::AST::ExternAST
 A Function Definition that has the prototype and definition in terms of a block. More...
class  sammine_lang::AST::ExprAST
class  sammine_lang::AST::BlockAST
 An AST to simulate a { } code block. More...
class  sammine_lang::AST::FuncDefAST
class  sammine_lang::AST::StructDefAST
struct  sammine_lang::AST::EnumVariantDef
class  sammine_lang::AST::EnumDefAST
class  sammine_lang::AST::TypeAliasDefAST
class  sammine_lang::AST::VarDefAST
 A variable definition: "var x = expression;" or "let (a, b) = expr;". More...
class  sammine_lang::AST::NumberExprAST
class  sammine_lang::AST::StringExprAST
class  sammine_lang::AST::BoolExprAST
class  sammine_lang::AST::CharExprAST
class  sammine_lang::AST::BinaryExprAST
class  sammine_lang::AST::ReturnExprAST
class  sammine_lang::AST::CallExprAST
class  sammine_lang::AST::UnitExprAST
class  sammine_lang::AST::IfExprAST
class  sammine_lang::AST::VariableExprAST
class  sammine_lang::AST::DerefExprAST
class  sammine_lang::AST::AddrOfExprAST
class  sammine_lang::AST::AllocExprAST
class  sammine_lang::AST::FreeExprAST
class  sammine_lang::AST::ArrayLiteralExprAST
class  sammine_lang::AST::IndexExprAST
class  sammine_lang::AST::LenExprAST
class  sammine_lang::AST::UnaryNegExprAST
class  sammine_lang::AST::StructLiteralExprAST
class  sammine_lang::AST::FieldAccessExprAST
struct  sammine_lang::AST::CasePattern
struct  sammine_lang::AST::CaseArm
class  sammine_lang::AST::CaseExprAST
class  sammine_lang::AST::WhileExprAST
class  sammine_lang::AST::TupleLiteralExprAST
class  sammine_lang::AST::TypeClassDeclAST
class  sammine_lang::AST::TypeClassInstanceAST

Macros

#define AST_NODE_METHODS(tree_name, kind_val)

Enumerations

enum class  ParseKind {
  Simple , Pointer , Array , Function ,
  Generic , Tuple
}

Detailed Description

Defined the AST Node classes (ProgramAST, StructDefAST, FuncDefAST) and a visitor interface for traversing the AST.

Macro Definition Documentation

◆ AST_NODE_METHODS

#define AST_NODE_METHODS ( tree_name,
kind_val )
Value:
std::string getTreeName() const override { return tree_name; } \
static bool classof(const AstBase *node) { \
return node->getKind() == kind_val; \
} \
void accept_vis(ASTVisitor *visitor) override { visitor->visit(this); } \
void walk_with_preorder(ASTVisitor *visitor) override { \
visitor->preorder_walk(this); \
} \
void walk_with_postorder(ASTVisitor *visitor) override { \
visitor->postorder_walk(this); \
} \
Type accept_synthesis(TypeCheckerVisitor *visitor) override { \
return visitor->synthesize(this); \
}