File indexing completed on 2024-04-28 04:36:07

0001 // THIS FILE IS GENERATED
0002 // WARNING! All changes made in this file will be lost!
0003 
0004 #ifndef FACT_AST_H_INCLUDED
0005 #define FACT_AST_H_INCLUDED
0006 
0007 #include <QList>
0008 #include <kdev-pg-list.h>
0009 
0010 
0011 
0012 #include <QString>
0013 
0014 namespace fact
0015 {
0016 class Lexer;
0017 }
0018 
0019 
0020 namespace fact
0021 {
0022 
0023 struct AssignmentStatementAst;
0024 struct BlockStatementAst;
0025 struct BodyAst;
0026 struct ConditionAst;
0027 struct DeclarationAst;
0028 struct ExpressionAst;
0029 struct FunctionDefinitionAst;
0030 struct IfStatementAst;
0031 struct MultExpressionAst;
0032 struct PrimaryAst;
0033 struct ProgramAst;
0034 struct ReturnStatementAst;
0035 struct StatementAst;
0036 struct VariableAst;
0037 
0038 
0039 struct  AstNode
0040 {
0041     enum AstNodeKind
0042     {
0043         AssignmentStatementKind = 1000,
0044         BlockStatementKind = 1001,
0045         BodyKind = 1002,
0046         ConditionKind = 1003,
0047         DeclarationKind = 1004,
0048         ExpressionKind = 1005,
0049         FunctionDefinitionKind = 1006,
0050         IfStatementKind = 1007,
0051         MultExpressionKind = 1008,
0052         PrimaryKind = 1009,
0053         ProgramKind = 1010,
0054         ReturnStatementKind = 1011,
0055         StatementKind = 1012,
0056         VariableKind = 1013,
0057         AST_NODE_KIND_COUNT
0058     };
0059 
0060     int kind;
0061     qint64 startToken;
0062     qint64 endToken;
0063 };
0064 
0065 struct  AssignmentStatementAst: public AstNode
0066 {
0067     enum { KIND = AssignmentStatementKind };
0068 
0069     qint64 id;
0070     ExpressionAst *expr;
0071 };
0072 
0073 struct  BlockStatementAst: public AstNode
0074 {
0075     enum { KIND = BlockStatementKind };
0076 
0077     const KDevPG::ListNode<StatementAst *> *stmtSequence;
0078 };
0079 
0080 struct  BodyAst: public AstNode
0081 {
0082     enum { KIND = BodyKind };
0083 
0084     const KDevPG::ListNode<DeclarationAst *> *declSequence;
0085     const KDevPG::ListNode<StatementAst *> *stmtSequence;
0086 };
0087 
0088 struct  ConditionAst: public AstNode
0089 {
0090     enum { KIND = ConditionKind };
0091 
0092     ExpressionAst *leftExpr;
0093     ExpressionAst *rightExpr;
0094 };
0095 
0096 struct  DeclarationAst: public AstNode
0097 {
0098     enum { KIND = DeclarationKind };
0099 
0100     VariableAst *var;
0101 };
0102 
0103 struct  ExpressionAst: public AstNode
0104 {
0105     enum { KIND = ExpressionKind };
0106 
0107     MultExpressionAst *leftExpr;
0108     MultExpressionAst *rightExpr;
0109 };
0110 
0111 struct  FunctionDefinitionAst: public AstNode
0112 {
0113     enum { KIND = FunctionDefinitionKind };
0114 
0115     qint64 id;
0116     const KDevPG::ListNode<qint64 > *paramSequence;
0117     BodyAst *body;
0118 };
0119 
0120 struct  IfStatementAst: public AstNode
0121 {
0122     enum { KIND = IfStatementKind };
0123 
0124     ConditionAst *cond;
0125     StatementAst *ifStmt;
0126     StatementAst *elseStmt;
0127 };
0128 
0129 struct  MultExpressionAst: public AstNode
0130 {
0131     enum { KIND = MultExpressionKind };
0132 
0133     PrimaryAst *leftExpr;
0134     PrimaryAst *rightExpr;
0135 };
0136 
0137 struct  PrimaryAst: public AstNode
0138 {
0139     enum { KIND = PrimaryKind };
0140 
0141     qint64 num;
0142     qint64 id;
0143     const KDevPG::ListNode<ExpressionAst *> *argumentSequence;
0144 };
0145 
0146 struct  ProgramAst: public AstNode
0147 {
0148     enum { KIND = ProgramKind };
0149 
0150     const KDevPG::ListNode<FunctionDefinitionAst *> *funSequence;
0151 };
0152 
0153 struct  ReturnStatementAst: public AstNode
0154 {
0155     enum { KIND = ReturnStatementKind };
0156 
0157     ExpressionAst *expr;
0158 };
0159 
0160 struct  StatementAst: public AstNode
0161 {
0162     enum { KIND = StatementKind };
0163 
0164     AssignmentStatementAst *assignStmt;
0165     IfStatementAst *ifStmt;
0166     BlockStatementAst *blockStmt;
0167     ReturnStatementAst *returnStmt;
0168 };
0169 
0170 struct  VariableAst: public AstNode
0171 {
0172     enum { KIND = VariableKind };
0173 
0174     qint64 id;
0175 };
0176 
0177 
0178 
0179 } // end of namespace fact
0180 
0181 #endif
0182