Update parser.h
This commit is contained in:
parent
4d15417a64
commit
60115b9e3d
@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user