✨ add new ast nodes
This commit is contained in:
parent
9bf4eacc62
commit
19480f7f26
|
@ -1,19 +1,10 @@
|
||||||
#include "nasal_new_ast.h"
|
#include "nasal_new_ast.h"
|
||||||
|
|
||||||
bool stmt::accept(ast_visitor* visitor) {
|
|
||||||
visitor->visit_stmt(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool expr::accept(ast_visitor* visitor) {
|
bool expr::accept(ast_visitor* visitor) {
|
||||||
visitor->visit_expr(this);
|
visitor->visit_expr(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ast_visitor::visit_stmt(stmt* node) {
|
|
||||||
node->accept(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ast_visitor::visit_expr(expr* node) {
|
void ast_visitor::visit_expr(expr* node) {
|
||||||
node->accept(this);
|
node->accept(this);
|
||||||
}
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
#include "nasal.h"
|
#include "nasal.h"
|
||||||
#include "nasal_err.h"
|
#include "nasal_err.h"
|
||||||
|
|
||||||
enum class ast_node_type:u32 {
|
enum class expr_type:u32 {
|
||||||
ast_null=0, // null node
|
ast_null=0, // null node
|
||||||
ast_stmt,
|
ast_stmt,
|
||||||
ast_expr,
|
ast_expr,
|
||||||
|
@ -76,37 +76,49 @@ enum class ast_node_type:u32 {
|
||||||
|
|
||||||
class ast_visitor;
|
class ast_visitor;
|
||||||
|
|
||||||
class ast_node {
|
class expr {
|
||||||
private:
|
private:
|
||||||
span nd_loc;
|
span nd_loc;
|
||||||
ast_node_type nd_type;
|
expr_type nd_type;
|
||||||
public:
|
public:
|
||||||
ast_node(const span& location,ast_node_type node_type):
|
expr(const span& location,expr_type node_type):
|
||||||
nd_loc(location), nd_type(node_type) {}
|
nd_loc(location), nd_type(node_type) {}
|
||||||
~ast_node() = default;
|
~expr() = default;
|
||||||
virtual bool accept(ast_visitor*) = 0;
|
virtual bool accept(ast_visitor*) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class stmt:public ast_node {
|
class null_expr:public expr {};
|
||||||
public:
|
class nil_expr:public expr {};
|
||||||
stmt(const span& location,ast_node_type node_type):
|
class number_literal:public expr {};
|
||||||
ast_node(location, node_type) {}
|
class string_literal:public expr {};
|
||||||
~stmt() = default;
|
class identifier:public expr {};
|
||||||
virtual bool accept(ast_visitor*);
|
class bool_literal:public expr {};
|
||||||
};
|
class vector_expr:public expr {};
|
||||||
|
class hash_expr:public expr {};
|
||||||
class expr:public ast_node {
|
class hash_pair:public expr {};
|
||||||
private:
|
class function:public expr {};
|
||||||
|
class parameter:public expr {};
|
||||||
public:
|
class ternary_operator:public expr {};
|
||||||
expr(const span& location,ast_node_type node_type):
|
class binary_operator:public expr {};
|
||||||
ast_node(location, node_type) {}
|
class unary_operator:public expr {};
|
||||||
~expr() = default;
|
class call_expr:public expr {};
|
||||||
virtual bool accept(ast_visitor*);
|
class call_hash:public expr {};
|
||||||
};
|
class call_vector:public expr {};
|
||||||
|
class call_function:public expr {};
|
||||||
|
class slice_vector:public expr {};
|
||||||
|
class definition:public expr {};
|
||||||
|
class multi_define:public expr {};
|
||||||
|
class while_expr:public expr {};
|
||||||
|
class for_expr:public expr {};
|
||||||
|
class foreach_expr:public expr {};
|
||||||
|
class forindex_expr:public expr {};
|
||||||
|
class condition_expr:public expr {};
|
||||||
|
class if_expr:public expr {};
|
||||||
|
class continue_expr:public expr {};
|
||||||
|
class break_expr:public expr {};
|
||||||
|
class return_expr:public expr {};
|
||||||
|
|
||||||
class ast_visitor {
|
class ast_visitor {
|
||||||
public:
|
public:
|
||||||
virtual void visit_stmt(stmt*);
|
|
||||||
virtual void visit_expr(expr*);
|
virtual void visit_expr(expr*);
|
||||||
};
|
};
|
Loading…
Reference in New Issue