Update parser.h

This commit is contained in:
ala89 2023-10-27 17:16:41 +02:00
parent 4d15417a64
commit 60115b9e3d

View File

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