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