picceler
Loading...
Searching...
No Matches
ast.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <string>
5#include <cstddef>
6#include <cstdint>
7#include <memory>
8
9#include "lexer.h"
10
11namespace picceler {
12
16struct ASTNode {
17 ASTNode() = default;
18 virtual ~ASTNode() = default;
19
20 ASTNode(const ASTNode &) = delete;
21 ASTNode &operator=(const ASTNode &) = delete;
22 ASTNode(ASTNode &&) = default;
23 ASTNode &operator=(ASTNode &&) = default;
24
25 virtual std::string toString() const = 0;
26};
27
31
32struct ModuleNode : public ASTNode {
33 std::vector<std::unique_ptr<ASTNode>> statements;
34 std::string toString() const override;
35};
36
40struct VariableNode : public ASTNode {
41 std::string name;
42 std::string toString() const override;
43};
44
48struct StringNode : public ASTNode {
49 std::string value;
50 std::string toString() const override;
51};
52
56struct NumberNode : public ASTNode {
57 int64_t value;
58 std::string toString() const override;
59};
60
64struct AssignmentNode : public ASTNode {
65 std::unique_ptr<VariableNode> lhs;
66 std::unique_ptr<ASTNode> rhs;
67 std::string toString() const override;
68};
69
73struct CallNode : public ASTNode {
74 std::string callee;
75 std::vector<std::unique_ptr<ASTNode>> arguments;
76 std::string toString() const override;
77};
78
82
83struct KernelNode : public ASTNode {
84 std::vector<std::vector<double>> rows;
85 std::string toString() const override;
86};
87
88} // namespace picceler
Lexer for the picceler programming language.
Definition ast.h:11
ASTNode(const ASTNode &)=delete
ASTNode(ASTNode &&)=default
ASTNode & operator=(ASTNode &&)=default
virtual std::string toString() const =0
virtual ~ASTNode()=default
ASTNode & operator=(const ASTNode &)=delete
AST node for assignment statements.
Definition ast.h:64
std::string toString() const override
Definition ast.cpp:15
std::unique_ptr< ASTNode > rhs
Definition ast.h:66
std::unique_ptr< VariableNode > lhs
Definition ast.h:65
AST node for function calls.
Definition ast.h:73
std::string callee
Definition ast.h:74
std::string toString() const override
Definition ast.cpp:19
std::vector< std::unique_ptr< ASTNode > > arguments
Definition ast.h:75
AST node for kernel definitions.
Definition ast.h:83
std::vector< std::vector< double > > rows
Definition ast.h:84
std::string toString() const override
Definition ast.cpp:30
AST node for the entire module.
Definition ast.h:32
std::vector< std::unique_ptr< ASTNode > > statements
Definition ast.h:33
std::string toString() const override
Definition ast.cpp:7
AST node for numeric literals.
Definition ast.h:56
std::string toString() const override
Definition ast.cpp:13
int64_t value
Definition ast.h:57
AST node for string literals.
Definition ast.h:48
std::string value
Definition ast.h:49
std::string toString() const override
Definition ast.cpp:11
AST node for variable references.
Definition ast.h:40
std::string name
Definition ast.h:41
std::string toString() const override
Definition ast.cpp:9