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
#define DEF_PARSER_H
#include <vector>
#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<Node> 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;
};
};