1 // THIS FILE IS GENERATED
2 // WARNING! All changes made in this file will be lost!
3 
4 #ifndef FACT_AST_H_INCLUDED
5 #define FACT_AST_H_INCLUDED
6 
7 #include <QList>
8 #include <kdev-pg-list.h>
9 
10 
11 
12 #include <QString>
13 
14 namespace fact
15 {
16 class Lexer;
17 }
18 
19 
20 namespace fact
21 {
22 
23 struct AssignmentStatementAst;
24 struct BlockStatementAst;
25 struct BodyAst;
26 struct ConditionAst;
27 struct DeclarationAst;
28 struct ExpressionAst;
29 struct FunctionDefinitionAst;
30 struct IfStatementAst;
31 struct MultExpressionAst;
32 struct PrimaryAst;
33 struct ProgramAst;
34 struct ReturnStatementAst;
35 struct StatementAst;
36 struct VariableAst;
37 
38 
39 struct  AstNode
40 {
41     enum AstNodeKind
42     {
43         AssignmentStatementKind = 1000,
44         BlockStatementKind = 1001,
45         BodyKind = 1002,
46         ConditionKind = 1003,
47         DeclarationKind = 1004,
48         ExpressionKind = 1005,
49         FunctionDefinitionKind = 1006,
50         IfStatementKind = 1007,
51         MultExpressionKind = 1008,
52         PrimaryKind = 1009,
53         ProgramKind = 1010,
54         ReturnStatementKind = 1011,
55         StatementKind = 1012,
56         VariableKind = 1013,
57         AST_NODE_KIND_COUNT
58     };
59 
60     int kind;
61     qint64 startToken;
62     qint64 endToken;
63 };
64 
65 struct  AssignmentStatementAst: public AstNode
66 {
67     enum { KIND = AssignmentStatementKind };
68 
69     qint64 id;
70     ExpressionAst *expr;
71 };
72 
73 struct  BlockStatementAst: public AstNode
74 {
75     enum { KIND = BlockStatementKind };
76 
77     const KDevPG::ListNode<StatementAst *> *stmtSequence;
78 };
79 
80 struct  BodyAst: public AstNode
81 {
82     enum { KIND = BodyKind };
83 
84     const KDevPG::ListNode<DeclarationAst *> *declSequence;
85     const KDevPG::ListNode<StatementAst *> *stmtSequence;
86 };
87 
88 struct  ConditionAst: public AstNode
89 {
90     enum { KIND = ConditionKind };
91 
92     ExpressionAst *leftExpr;
93     ExpressionAst *rightExpr;
94 };
95 
96 struct  DeclarationAst: public AstNode
97 {
98     enum { KIND = DeclarationKind };
99 
100     VariableAst *var;
101 };
102 
103 struct  ExpressionAst: public AstNode
104 {
105     enum { KIND = ExpressionKind };
106 
107     MultExpressionAst *leftExpr;
108     MultExpressionAst *rightExpr;
109 };
110 
111 struct  FunctionDefinitionAst: public AstNode
112 {
113     enum { KIND = FunctionDefinitionKind };
114 
115     qint64 id;
116     const KDevPG::ListNode<qint64 > *paramSequence;
117     BodyAst *body;
118 };
119 
120 struct  IfStatementAst: public AstNode
121 {
122     enum { KIND = IfStatementKind };
123 
124     ConditionAst *cond;
125     StatementAst *ifStmt;
126     StatementAst *elseStmt;
127 };
128 
129 struct  MultExpressionAst: public AstNode
130 {
131     enum { KIND = MultExpressionKind };
132 
133     PrimaryAst *leftExpr;
134     PrimaryAst *rightExpr;
135 };
136 
137 struct  PrimaryAst: public AstNode
138 {
139     enum { KIND = PrimaryKind };
140 
141     qint64 num;
142     qint64 id;
143     const KDevPG::ListNode<ExpressionAst *> *argumentSequence;
144 };
145 
146 struct  ProgramAst: public AstNode
147 {
148     enum { KIND = ProgramKind };
149 
150     const KDevPG::ListNode<FunctionDefinitionAst *> *funSequence;
151 };
152 
153 struct  ReturnStatementAst: public AstNode
154 {
155     enum { KIND = ReturnStatementKind };
156 
157     ExpressionAst *expr;
158 };
159 
160 struct  StatementAst: public AstNode
161 {
162     enum { KIND = StatementKind };
163 
164     AssignmentStatementAst *assignStmt;
165     IfStatementAst *ifStmt;
166     BlockStatementAst *blockStmt;
167     ReturnStatementAst *returnStmt;
168 };
169 
170 struct  VariableAst: public AstNode
171 {
172     enum { KIND = VariableKind };
173 
174     qint64 id;
175 };
176 
177 
178 
179 } // end of namespace fact
180 
181 #endif
182 
183