diff --git a/src/include/parser.h b/src/include/parser.h index c4d54d9..f14c6db 100644 --- a/src/include/parser.h +++ b/src/include/parser.h @@ -1,6 +1,7 @@ #ifndef DEF_PARSER_H #define DEF_PARSER_H +#include #include "tokenize.h" using namespace std; @@ -17,8 +18,8 @@ ExprStatement -> Expr -> | T - | T + S - | T - S + | T + Expr + | T - Expr T -> | F @@ -26,12 +27,12 @@ T -> | F / T | F % T -F -> - | U - | - F - | + F - U -> + | F + | - U + | + U + +F -> | (Expr) | Identifier | Number @@ -42,30 +43,28 @@ enum class NodeType { Prog, // -> Instruction; Prog AssignedDeclaration, // -> Type Identifier = Expr Declaration, // -> Type Identifier - Plus, // -> T + S - Minus, // -> T - S + Plus, // -> T + Expr + Minus, // -> T - Expr Mult, // -> F * T Div, // -> F / T Mod, // -> F % T UnaryMinus, // -> -F UnaryPlus, // -> +F Parenthesis, // -> (Expr) - Assignment, // -> Identifier = Expr - Leaf + Assignment // -> Identifier = Expr }; -struct Node { +struct InnerNode { NodeType type; - Node* children; + vector children; }; // A Leaf is always corresponding to a Token -enum class TreeType { Leaf, Node }; -struct SyntaxTree { - TreeType type; +struct Node { + bool is_leaf; union { - Node node; + InnerNode node; Token leaf; }; };