-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAST.cs
143 lines (141 loc) · 3.35 KB
/
AST.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System.Collections.Generic;
namespace GalgameNovelScript
{
public abstract class AST
{
}
public class Num : AST
{
public Token Token { get; set; }
public object Value { get; set; }
public Num(Token token)
{
Token = token;
Value = token.Value;
}
}
public class Str : AST
{
public Token Token { get; set; }
public object Value { get; set; }
public Str(Token token)
{
Token = token;
Value = token.Value;
}
}
public class Boolean : AST
{
public Token Token { get; set; }
public object Value { get; set; }
public Boolean(Token token)
{
Token = token;
Value = token.Value;
}
}
public class None : AST
{
public Token Token { get; set; }
public object Value { get; set; }
public None(Token token)
{
Token = token;
Value = token.Value;
}
}
public class BinOp : AST
{
public AST Left { get; set; }
public Token Op { get; set; }
public AST Right { get; set; }
public BinOp(AST left, Token op, AST right)
{
Left = left;
Op = op;
Right = right;
}
}
public class UnaryOp : AST
{
public Token Token { get; set; }
public AST Expr { get; set; }
public UnaryOp(Token token, AST expr)
{
Token = token;
Expr = expr;
}
}
public class Var : AST
{
public Token Token { get; set; }
public string Value { get; set; }
public Var(Token token)
{
Token = token;
Value = (string)token.Value;
}
}
public class Program : AST
{
public List<AST> Stmts { get; set; }
public Program()
{
Stmts = new List<AST>();
}
}
public class FunCall : AST
{
public Var VarNode { get; set; }
public Args ActualParams { get; set; }
public FunCall(Var varNode, Args actualParams)
{
VarNode = varNode;
ActualParams = actualParams;
}
}
public class IfStmt : AST
{
public List<(AST Condition, AST ThenStmt)> Stmts { get; set; }
public IfStmt(List<(AST condition, AST thenStmt)> stmts)
{
Stmts = stmts;
}
}
public class CaseStmt : AST
{
public AST Condition { get; set; }
public List<WhenStmt> WhenStmts { get; set; }
public CaseStmt(AST condition, List<WhenStmt> whenStmts)
{
Condition = condition;
WhenStmts = whenStmts;
}
}
public class WhenStmt : AST
{
public AST Condition { get; set; }
public AST ThenStmt { get; set; }
public WhenStmt(AST condition, AST thenStmt)
{
Condition = condition;
ThenStmt = thenStmt;
}
}
public class Suite : AST
{
public List<AST> Stmts { get; set; }
public Suite(List<AST> stmts)
{
Stmts = stmts;
}
}
public class Args : AST
{
public List<AST> ArgsList { get; set; }
public Args(List<AST> argsList)
{
ArgsList = argsList;
}
}
}