]> gitweb.ps.run Git - toc/blobdiff - gen/TocParser.h
add comments, fix struct/function lookup
[toc] / gen / TocParser.h
index 6dc941cb418895dcf108399f2ae5708b7b8cd9a0..15e4d490f9e93b6066d7ef98cc110fbc36471805 100644 (file)
@@ -14,20 +14,29 @@ public:
   enum {\r
     T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, T__5 = 6, T__6 = 7, \r
     T__7 = 8, T__8 = 9, T__9 = 10, T__10 = 11, T__11 = 12, T__12 = 13, T__13 = 14, \r
-    T__14 = 15, T__15 = 16, BINARY_OPERATOR = 17, INTLIT = 18, NAME = 19, \r
-    WS = 20, NEWLINE = 21\r
+    T__14 = 15, T__15 = 16, T__16 = 17, T__17 = 18, T__18 = 19, T__19 = 20, \r
+    T__20 = 21, T__21 = 22, T__22 = 23, T__23 = 24, T__24 = 25, T__25 = 26, \r
+    T__26 = 27, T__27 = 28, T__28 = 29, T__29 = 30, T__30 = 31, T__31 = 32, \r
+    T__32 = 33, T__33 = 34, T__34 = 35, T__35 = 36, T__36 = 37, T__37 = 38, \r
+    T__38 = 39, T__39 = 40, T__40 = 41, T__41 = 42, T__42 = 43, T__43 = 44, \r
+    T__44 = 45, T__45 = 46, T__46 = 47, T__47 = 48, T__48 = 49, T__49 = 50, \r
+    T__50 = 51, T__51 = 52, T__52 = 53, T__53 = 54, T__54 = 55, T__55 = 56, \r
+    T__56 = 57, T__57 = 58, INT_LIT = 59, DECIMAL_LIT = 60, BOOL_LIT = 61, \r
+    StringLit = 62, NAME = 63, WS = 64, NEWLINE = 65, COMMENT = 66\r
   };\r
 \r
   enum {\r
-    RuleProg = 0, RuleDecl = 1, RuleVarDecl = 2, RuleVar = 3, RuleType = 4, \r
-    RuleFuncDecl = 5, RuleFunc = 6, RuleParameter = 7, RuleFirstParameter = 8, \r
-    RuleAdditionalParameter = 9, RuleBody = 10, RuleStructDecl = 11, RuleStructMember = 12, \r
-    RuleStructVar = 13, RuleStructMethod = 14, RuleStmt = 15, RuleConditional = 16, \r
-    RuleIfCond = 17, RuleLoop = 18, RuleWhileLoop = 19, RuleAssignment = 20, \r
-    RuleReturnStmt = 21, RuleExpr = 22, RuleNonOpExpr = 23, RuleNonSubscriptExpr = 24, \r
-    RuleFuncCall = 25, RuleOperatorExpr = 26, RuleBinaryOperator = 27, RuleIdentifier = 28, \r
-    RuleLiteral = 29, RuleSubscript = 30, RuleMemberAccess = 31, RuleParenExpr = 32, \r
-    RuleFuncName = 33, RuleVarName = 34, RuleTypeName = 35, RuleStructName = 36\r
+    RuleProg = 0, RuleDecl = 1, RuleNamespaceDecl = 2, RuleVarDecl = 3, \r
+    RuleVar = 4, RuleVarInit = 5, RuleType = 6, RuleTypeModifier = 7, RuleNamespaceSpecifier = 8, \r
+    RuleFuncDecl = 9, RuleFunc = 10, RuleParameter = 11, RuleBody = 12, \r
+    RuleStructDecl = 13, RuleStructMember = 14, RuleStructVar = 15, RuleStructMethod = 16, \r
+    RulePrivateDecl = 17, RuleGenericDecl = 18, RuleGenericInstantiation = 19, \r
+    RuleStmt = 20, RuleIfStmt = 21, RuleElseIfStmt = 22, RuleElseStmt = 23, \r
+    RuleSwitchStmt = 24, RuleSwitchBody = 25, RuleSwitchCase = 26, RuleForStmt = 27, \r
+    RuleWhileStmt = 28, RuleAssignStmt = 29, RuleReturnStmt = 30, RuleExpr = 31, \r
+    RuleDot = 32, RuleArrow = 33, RuleLiteral = 34, RuleFuncName = 35, RuleVarName = 36, \r
+    RuleTypeName = 37, RuleStructName = 38, RulePostfix_op = 39, RulePrefix_op = 40, \r
+    RuleBinary_op = 41\r
   };\r
 \r
   explicit TocParser(antlr4::TokenStream *input);\r
@@ -42,41 +51,46 @@ public:
 \r
   class ProgContext;\r
   class DeclContext;\r
+  class NamespaceDeclContext;\r
   class VarDeclContext;\r
   class VarContext;\r
+  class VarInitContext;\r
   class TypeContext;\r
+  class TypeModifierContext;\r
+  class NamespaceSpecifierContext;\r
   class FuncDeclContext;\r
   class FuncContext;\r
   class ParameterContext;\r
-  class FirstParameterContext;\r
-  class AdditionalParameterContext;\r
   class BodyContext;\r
   class StructDeclContext;\r
   class StructMemberContext;\r
   class StructVarContext;\r
   class StructMethodContext;\r
+  class PrivateDeclContext;\r
+  class GenericDeclContext;\r
+  class GenericInstantiationContext;\r
   class StmtContext;\r
-  class ConditionalContext;\r
-  class IfCondContext;\r
-  class LoopContext;\r
-  class WhileLoopContext;\r
-  class AssignmentContext;\r
+  class IfStmtContext;\r
+  class ElseIfStmtContext;\r
+  class ElseStmtContext;\r
+  class SwitchStmtContext;\r
+  class SwitchBodyContext;\r
+  class SwitchCaseContext;\r
+  class ForStmtContext;\r
+  class WhileStmtContext;\r
+  class AssignStmtContext;\r
   class ReturnStmtContext;\r
   class ExprContext;\r
-  class NonOpExprContext;\r
-  class NonSubscriptExprContext;\r
-  class FuncCallContext;\r
-  class OperatorExprContext;\r
-  class BinaryOperatorContext;\r
-  class IdentifierContext;\r
+  class DotContext;\r
+  class ArrowContext;\r
   class LiteralContext;\r
-  class SubscriptContext;\r
-  class MemberAccessContext;\r
-  class ParenExprContext;\r
   class FuncNameContext;\r
   class VarNameContext;\r
   class TypeNameContext;\r
-  class StructNameContext; \r
+  class StructNameContext;\r
+  class Postfix_opContext;\r
+  class Prefix_opContext;\r
+  class Binary_opContext; \r
 \r
   class  ProgContext : public antlr4::ParserRuleContext {\r
   public:\r
@@ -86,8 +100,6 @@ public:
     std::vector<DeclContext *> decl();\r
     DeclContext* decl(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -100,22 +112,32 @@ public:
     VarDeclContext *varDecl();\r
     FuncDeclContext *funcDecl();\r
     StructDeclContext *structDecl();\r
+    NamespaceDeclContext *namespaceDecl();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
   DeclContext* decl();\r
 \r
+  class  NamespaceDeclContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    NamespaceDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
+    TypeNameContext *typeName();\r
+    std::vector<DeclContext *> decl();\r
+    DeclContext* decl(size_t i);\r
+\r
+   \r
+  };\r
+\r
+  NamespaceDeclContext* namespaceDecl();\r
+\r
   class  VarDeclContext : public antlr4::ParserRuleContext {\r
   public:\r
     VarDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
     VarContext *var();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -129,95 +151,99 @@ public:
     TypeContext *type();\r
     ExprContext *expr();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
   VarContext* var();\r
 \r
+  class  VarInitContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    VarInitContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
+    VarNameContext *varName();\r
+    TypeContext *type();\r
+    ExprContext *expr();\r
+\r
+   \r
+  };\r
+\r
+  VarInitContext* varInit();\r
+\r
   class  TypeContext : public antlr4::ParserRuleContext {\r
   public:\r
     TypeContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
     TypeNameContext *typeName();\r
+    std::vector<NamespaceSpecifierContext *> namespaceSpecifier();\r
+    NamespaceSpecifierContext* namespaceSpecifier(size_t i);\r
+    GenericInstantiationContext *genericInstantiation();\r
+    std::vector<TypeModifierContext *> typeModifier();\r
+    TypeModifierContext* typeModifier(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
   TypeContext* type();\r
 \r
-  class  FuncDeclContext : public antlr4::ParserRuleContext {\r
+  class  TypeModifierContext : public antlr4::ParserRuleContext {\r
   public:\r
-    FuncDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    TypeModifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncContext *func();\r
+    antlr4::tree::TerminalNode *INT_LIT();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  FuncDeclContext* funcDecl();\r
+  TypeModifierContext* typeModifier();\r
 \r
-  class  FuncContext : public antlr4::ParserRuleContext {\r
+  class  NamespaceSpecifierContext : public antlr4::ParserRuleContext {\r
   public:\r
-    FuncContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    NamespaceSpecifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncNameContext *funcName();\r
-    ParameterContext *parameter();\r
-    BodyContext *body();\r
-    TypeContext *type();\r
+    TypeNameContext *typeName();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  FuncContext* func();\r
+  NamespaceSpecifierContext* namespaceSpecifier();\r
 \r
-  class  ParameterContext : public antlr4::ParserRuleContext {\r
+  class  FuncDeclContext : public antlr4::ParserRuleContext {\r
   public:\r
-    ParameterContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    FuncDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FirstParameterContext *firstParameter();\r
-    std::vector<AdditionalParameterContext *> additionalParameter();\r
-    AdditionalParameterContext* additionalParameter(size_t i);\r
+    FuncContext *func();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  ParameterContext* parameter();\r
+  FuncDeclContext* funcDecl();\r
 \r
-  class  FirstParameterContext : public antlr4::ParserRuleContext {\r
+  class  FuncContext : public antlr4::ParserRuleContext {\r
   public:\r
-    FirstParameterContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    FuncContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    VarContext *var();\r
+    FuncNameContext *funcName();\r
+    ParameterContext *parameter();\r
+    TypeContext *type();\r
+    BodyContext *body();\r
+    GenericDeclContext *genericDecl();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  FirstParameterContext* firstParameter();\r
+  FuncContext* func();\r
 \r
-  class  AdditionalParameterContext : public antlr4::ParserRuleContext {\r
+  class  ParameterContext : public antlr4::ParserRuleContext {\r
   public:\r
-    AdditionalParameterContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ParameterContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    VarContext *var();\r
+    std::vector<VarContext *> var();\r
+    VarContext* var(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  AdditionalParameterContext* additionalParameter();\r
+  ParameterContext* parameter();\r
 \r
   class  BodyContext : public antlr4::ParserRuleContext {\r
   public:\r
@@ -226,8 +252,6 @@ public:
     std::vector<StmtContext *> stmt();\r
     StmtContext* stmt(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -238,11 +262,10 @@ public:
     StructDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
     StructNameContext *structName();\r
+    GenericDeclContext *genericDecl();\r
     std::vector<StructMemberContext *> structMember();\r
     StructMemberContext* structMember(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -253,10 +276,9 @@ public:
     StructMemberContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
     StructVarContext *structVar();\r
+    PrivateDeclContext *privateDecl();\r
     StructMethodContext *structMethod();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -268,8 +290,6 @@ public:
     virtual size_t getRuleIndex() const override;\r
     VarContext *var();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -281,275 +301,330 @@ public:
     virtual size_t getRuleIndex() const override;\r
     FuncContext *func();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
   StructMethodContext* structMethod();\r
 \r
-  class  StmtContext : public antlr4::ParserRuleContext {\r
+  class  PrivateDeclContext : public antlr4::ParserRuleContext {\r
   public:\r
-    StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    PrivateDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    VarDeclContext *varDecl();\r
-    ConditionalContext *conditional();\r
-    LoopContext *loop();\r
-    AssignmentContext *assignment();\r
-    ReturnStmtContext *returnStmt();\r
-    ExprContext *expr();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  StmtContext* stmt();\r
+  PrivateDeclContext* privateDecl();\r
 \r
-  class  ConditionalContext : public antlr4::ParserRuleContext {\r
+  class  GenericDeclContext : public antlr4::ParserRuleContext {\r
   public:\r
-    ConditionalContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    GenericDeclContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    IfCondContext *ifCond();\r
+    std::vector<TypeNameContext *> typeName();\r
+    TypeNameContext* typeName(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  ConditionalContext* conditional();\r
+  GenericDeclContext* genericDecl();\r
 \r
-  class  IfCondContext : public antlr4::ParserRuleContext {\r
+  class  GenericInstantiationContext : public antlr4::ParserRuleContext {\r
   public:\r
-    IfCondContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    GenericInstantiationContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    ExprContext *expr();\r
-    BodyContext *body();\r
+    std::vector<TypeContext *> type();\r
+    TypeContext* type(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  IfCondContext* ifCond();\r
+  GenericInstantiationContext* genericInstantiation();\r
 \r
-  class  LoopContext : public antlr4::ParserRuleContext {\r
+  class  StmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    LoopContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    StmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    WhileLoopContext *whileLoop();\r
+    VarDeclContext *varDecl();\r
+    IfStmtContext *ifStmt();\r
+    SwitchStmtContext *switchStmt();\r
+    ForStmtContext *forStmt();\r
+    WhileStmtContext *whileStmt();\r
+    AssignStmtContext *assignStmt();\r
+    ReturnStmtContext *returnStmt();\r
+    ExprContext *expr();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  LoopContext* loop();\r
+  StmtContext* stmt();\r
 \r
-  class  WhileLoopContext : public antlr4::ParserRuleContext {\r
+  class  IfStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    WhileLoopContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    IfStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
     ExprContext *expr();\r
     BodyContext *body();\r
+    std::vector<ElseIfStmtContext *> elseIfStmt();\r
+    ElseIfStmtContext* elseIfStmt(size_t i);\r
+    ElseStmtContext *elseStmt();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  WhileLoopContext* whileLoop();\r
+  IfStmtContext* ifStmt();\r
 \r
-  class  AssignmentContext : public antlr4::ParserRuleContext {\r
+  class  ElseIfStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    AssignmentContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ElseIfStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    IdentifierContext *identifier();\r
     ExprContext *expr();\r
+    BodyContext *body();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  AssignmentContext* assignment();\r
+  ElseIfStmtContext* elseIfStmt();\r
 \r
-  class  ReturnStmtContext : public antlr4::ParserRuleContext {\r
+  class  ElseStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ElseStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    ExprContext *expr();\r
+    BodyContext *body();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  ReturnStmtContext* returnStmt();\r
+  ElseStmtContext* elseStmt();\r
 \r
-  class  ExprContext : public antlr4::ParserRuleContext {\r
+  class  SwitchStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    SwitchStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncCallContext *funcCall();\r
-    LiteralContext *literal();\r
-    IdentifierContext *identifier();\r
-    SubscriptContext *subscript();\r
-    MemberAccessContext *memberAccess();\r
-    ParenExprContext *parenExpr();\r
-    OperatorExprContext *operatorExpr();\r
+    ExprContext *expr();\r
+    SwitchBodyContext *switchBody();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  ExprContext* expr();\r
+  SwitchStmtContext* switchStmt();\r
 \r
-  class  NonOpExprContext : public antlr4::ParserRuleContext {\r
+  class  SwitchBodyContext : public antlr4::ParserRuleContext {\r
   public:\r
-    NonOpExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    SwitchBodyContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncCallContext *funcCall();\r
-    LiteralContext *literal();\r
-    IdentifierContext *identifier();\r
-    SubscriptContext *subscript();\r
-    MemberAccessContext *memberAccess();\r
-    ParenExprContext *parenExpr();\r
+    std::vector<SwitchCaseContext *> switchCase();\r
+    SwitchCaseContext* switchCase(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  NonOpExprContext* nonOpExpr();\r
+  SwitchBodyContext* switchBody();\r
 \r
-  class  NonSubscriptExprContext : public antlr4::ParserRuleContext {\r
+  class  SwitchCaseContext : public antlr4::ParserRuleContext {\r
   public:\r
-    NonSubscriptExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    SwitchCaseContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncCallContext *funcCall();\r
-    IdentifierContext *identifier();\r
-    MemberAccessContext *memberAccess();\r
-    ParenExprContext *parenExpr();\r
+    ExprContext *expr();\r
+    BodyContext *body();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  NonSubscriptExprContext* nonSubscriptExpr();\r
+  SwitchCaseContext* switchCase();\r
 \r
-  class  FuncCallContext : public antlr4::ParserRuleContext {\r
+  class  ForStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    FuncCallContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ForStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    FuncNameContext *funcName();\r
+    VarInitContext *varInit();\r
     std::vector<ExprContext *> expr();\r
     ExprContext* expr(size_t i);\r
+    BodyContext *body();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  FuncCallContext* funcCall();\r
+  ForStmtContext* forStmt();\r
 \r
-  class  OperatorExprContext : public antlr4::ParserRuleContext {\r
+  class  WhileStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    OperatorExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    WhileStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    BinaryOperatorContext *binaryOperator();\r
+    ExprContext *expr();\r
+    BodyContext *body();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  OperatorExprContext* operatorExpr();\r
+  WhileStmtContext* whileStmt();\r
 \r
-  class  BinaryOperatorContext : public antlr4::ParserRuleContext {\r
+  class  AssignStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    BinaryOperatorContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    AssignStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    std::vector<NonOpExprContext *> nonOpExpr();\r
-    NonOpExprContext* nonOpExpr(size_t i);\r
-    std::vector<antlr4::tree::TerminalNode *> BINARY_OPERATOR();\r
-    antlr4::tree::TerminalNode* BINARY_OPERATOR(size_t i);\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  BinaryOperatorContext* binaryOperator();\r
+  AssignStmtContext* assignStmt();\r
 \r
-  class  IdentifierContext : public antlr4::ParserRuleContext {\r
+  class  ReturnStmtContext : public antlr4::ParserRuleContext {\r
   public:\r
-    IdentifierContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    VarNameContext *varName();\r
+    ExprContext *expr();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  IdentifierContext* identifier();\r
+  ReturnStmtContext* returnStmt();\r
 \r
-  class  LiteralContext : public antlr4::ParserRuleContext {\r
+  class  ExprContext : public antlr4::ParserRuleContext {\r
   public:\r
-    LiteralContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+   \r
+    ExprContext() = default;\r
+    void copyFrom(ExprContext *context);\r
+    using antlr4::ParserRuleContext::copyFrom;\r
+\r
     virtual size_t getRuleIndex() const override;\r
-    antlr4::tree::TerminalNode *INTLIT();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  LiteralContext* literal();\r
+  class  DotExprContext : public ExprContext {\r
+  public:\r
+    DotExprContext(ExprContext *ctx);\r
+\r
+    ExprContext *expr();\r
+    VarNameContext *varName();\r
+    DotContext *dot();\r
+    ArrowContext *arrow();\r
+  };\r
 \r
-  class  SubscriptContext : public antlr4::ParserRuleContext {\r
+  class  FuncExprContext : public ExprContext {\r
   public:\r
-    SubscriptContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
-    virtual size_t getRuleIndex() const override;\r
-    NonSubscriptExprContext *nonSubscriptExpr();\r
+    FuncExprContext(ExprContext *ctx);\r
+\r
+    FuncNameContext *funcName();\r
+    std::vector<NamespaceSpecifierContext *> namespaceSpecifier();\r
+    NamespaceSpecifierContext* namespaceSpecifier(size_t i);\r
+    GenericInstantiationContext *genericInstantiation();\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
+  };\r
+\r
+  class  BracketExprContext : public ExprContext {\r
+  public:\r
+    BracketExprContext(ExprContext *ctx);\r
+\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
+  };\r
+\r
+  class  PrefixOpExprContext : public ExprContext {\r
+  public:\r
+    PrefixOpExprContext(ExprContext *ctx);\r
+\r
+    Prefix_opContext *prefix_op();\r
     ExprContext *expr();\r
+  };\r
+\r
+  class  MethodExprContext : public ExprContext {\r
+  public:\r
+    MethodExprContext(ExprContext *ctx);\r
+\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
+    FuncNameContext *funcName();\r
+    GenericInstantiationContext *genericInstantiation();\r
+  };\r
+\r
+  class  PostfixOpExprContext : public ExprContext {\r
+  public:\r
+    PostfixOpExprContext(ExprContext *ctx);\r
+\r
+    ExprContext *expr();\r
+    Postfix_opContext *postfix_op();\r
+  };\r
+\r
+  class  BinaryOpExprContext : public ExprContext {\r
+  public:\r
+    BinaryOpExprContext(ExprContext *ctx);\r
+\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
+    Binary_opContext *binary_op();\r
+  };\r
+\r
+  class  TernaryOpExprContext : public ExprContext {\r
+  public:\r
+    TernaryOpExprContext(ExprContext *ctx);\r
+\r
+    std::vector<ExprContext *> expr();\r
+    ExprContext* expr(size_t i);\r
+  };\r
+\r
+  class  LitExprContext : public ExprContext {\r
+  public:\r
+    LitExprContext(ExprContext *ctx);\r
+\r
+    LiteralContext *literal();\r
+  };\r
+\r
+  class  ParenExprContext : public ExprContext {\r
+  public:\r
+    ParenExprContext(ExprContext *ctx);\r
+\r
+    ExprContext *expr();\r
+  };\r
+\r
+  class  IdentifierExprContext : public ExprContext {\r
+  public:\r
+    IdentifierExprContext(ExprContext *ctx);\r
+\r
+    VarNameContext *varName();\r
+    std::vector<NamespaceSpecifierContext *> namespaceSpecifier();\r
+    NamespaceSpecifierContext* namespaceSpecifier(size_t i);\r
+  };\r
+\r
+  ExprContext* expr();\r
+  ExprContext* expr(int precedence);\r
+  class  DotContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    DotContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  SubscriptContext* subscript();\r
+  DotContext* dot();\r
 \r
-  class  MemberAccessContext : public antlr4::ParserRuleContext {\r
+  class  ArrowContext : public antlr4::ParserRuleContext {\r
   public:\r
-    MemberAccessContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    ArrowContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    std::vector<IdentifierContext *> identifier();\r
-    IdentifierContext* identifier(size_t i);\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  MemberAccessContext* memberAccess();\r
+  ArrowContext* arrow();\r
 \r
-  class  ParenExprContext : public antlr4::ParserRuleContext {\r
+  class  LiteralContext : public antlr4::ParserRuleContext {\r
   public:\r
-    ParenExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    LiteralContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
     virtual size_t getRuleIndex() const override;\r
-    ExprContext *expr();\r
+    antlr4::tree::TerminalNode *INT_LIT();\r
+    antlr4::tree::TerminalNode *DECIMAL_LIT();\r
+    antlr4::tree::TerminalNode *StringLit();\r
+    antlr4::tree::TerminalNode *BOOL_LIT();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
-  ParenExprContext* parenExpr();\r
+  LiteralContext* literal();\r
 \r
   class  FuncNameContext : public antlr4::ParserRuleContext {\r
   public:\r
@@ -557,8 +632,6 @@ public:
     virtual size_t getRuleIndex() const override;\r
     antlr4::tree::TerminalNode *NAME();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -570,8 +643,6 @@ public:
     virtual size_t getRuleIndex() const override;\r
     antlr4::tree::TerminalNode *NAME();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -583,8 +654,6 @@ public:
     virtual size_t getRuleIndex() const override;\r
     antlr4::tree::TerminalNode *NAME();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
@@ -596,13 +665,45 @@ public:
     virtual size_t getRuleIndex() const override;\r
     antlr4::tree::TerminalNode *NAME();\r
 \r
-    virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override;\r
-    virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override;\r
    \r
   };\r
 \r
   StructNameContext* structName();\r
 \r
+  class  Postfix_opContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    Postfix_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
+\r
+   \r
+  };\r
+\r
+  Postfix_opContext* postfix_op();\r
+\r
+  class  Prefix_opContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    Prefix_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
+    Postfix_opContext *postfix_op();\r
+\r
+   \r
+  };\r
+\r
+  Prefix_opContext* prefix_op();\r
+\r
+  class  Binary_opContext : public antlr4::ParserRuleContext {\r
+  public:\r
+    Binary_opContext(antlr4::ParserRuleContext *parent, size_t invokingState);\r
+    virtual size_t getRuleIndex() const override;\r
+\r
+   \r
+  };\r
+\r
+  Binary_opContext* binary_op();\r
+\r
+\r
+  virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;\r
+  bool exprSempred(ExprContext *_localctx, size_t predicateIndex);\r
 \r
 private:\r
   static std::vector<antlr4::dfa::DFA> _decisionToDFA;\r