📄 ast.h
字号:
};class InitDeclaratorAST: public AST{public: enum { Type = NodeType_InitDeclarator };public: InitDeclaratorAST(); inline DeclaratorAST *declarator() const { return m_declarator; } void setDeclarator(DeclaratorAST *declarator); inline AST *initializer() const { return m_initializer; } void setInitializer(AST *initializer);private: DeclaratorAST* m_declarator; AST* m_initializer;private: InitDeclaratorAST(const InitDeclaratorAST &source); void operator = (const InitDeclaratorAST &source);};class InitDeclaratorListAST: public AST{public: enum { Type = NodeType_InitDeclaratorList };public: InitDeclaratorListAST(); inline List<InitDeclaratorAST *> *initDeclaratorList() const { return m_initDeclaratorList; } void addInitDeclarator(InitDeclaratorAST *decl);private: List<InitDeclaratorAST *> *m_initDeclaratorList;private: InitDeclaratorListAST(const InitDeclaratorListAST &source); void operator = (const InitDeclaratorListAST &source);};class TypedefAST: public DeclarationAST{public: enum { Type = NodeType_Typedef };public: TypedefAST(); inline TypeSpecifierAST *typeSpec() const { return m_typeSpec; } void setTypeSpec(TypeSpecifierAST *typeSpec); inline InitDeclaratorListAST *initDeclaratorList() const { return m_initDeclaratorList; } void setInitDeclaratorList(InitDeclaratorListAST *initDeclaratorList);private: TypeSpecifierAST* m_typeSpec; InitDeclaratorListAST* m_initDeclaratorList;private: void operator = (const TypedefAST &source);};class TemplateParameterAST: public AST{public: enum { Type = NodeType_TemplateParameter };public: TemplateParameterAST(); inline TypeParameterAST *typeParameter() const { return m_typeParameter; } void setTypeParameter(TypeParameterAST *typeParameter); inline ParameterDeclarationAST *typeValueParameter() const { return m_typeValueParameter; } void setTypeValueParameter(ParameterDeclarationAST *typeValueParameter);private: TypeParameterAST* m_typeParameter; ParameterDeclarationAST* m_typeValueParameter;private: TemplateParameterAST(const TemplateParameterAST &source); void operator = (const TemplateParameterAST &source);};class TemplateParameterListAST: public AST{public: enum { Type = NodeType_TemplateParameterList };public: TemplateParameterListAST(); inline List<TemplateParameterAST *> *templateParameterList() const { return m_templateParameterList; } void addTemplateParameter(TemplateParameterAST *templateParameter);private: List<TemplateParameterAST *> *m_templateParameterList;private: TemplateParameterListAST(const TemplateParameterListAST &source); void operator = (const TemplateParameterListAST &source);};class TemplateDeclarationAST: public DeclarationAST{public: enum { Type = NodeType_TemplateDeclaration };public: TemplateDeclarationAST(); inline AST *exported() const { return m_exported; } void setExported(AST *exported); inline TemplateParameterListAST *templateParameterList() const { return m_templateParameterList; } void setTemplateParameterList(TemplateParameterListAST *templateParameterList); inline DeclarationAST *declaration() const { return m_declaration; } void setDeclaration(DeclarationAST *declaration);private: AST* m_exported; TemplateParameterListAST* m_templateParameterList; DeclarationAST* m_declaration;private: TemplateDeclarationAST(const TemplateDeclarationAST &source); void operator = (const TemplateDeclarationAST &source);};class SimpleDeclarationAST: public DeclarationAST{public: enum { Type = NodeType_SimpleDeclaration };public: SimpleDeclarationAST(); inline AST *functionSpecifier() const { return m_functionSpecifier; } void setFunctionSpecifier(AST *functionSpecifier); inline AST *storageSpecifier() const { return m_storageSpecifier; } void setStorageSpecifier(AST *storageSpecifier); inline TypeSpecifierAST *typeSpec() const { return m_typeSpec; } void setTypeSpec(TypeSpecifierAST *typeSpec); inline InitDeclaratorListAST *initDeclaratorList() const { return m_initDeclaratorList; } void setInitDeclaratorList(InitDeclaratorListAST *initDeclaratorList); inline AST *winDeclSpec() const { return m_winDeclSpec; } void setWinDeclSpec(AST *winDeclSpec);private: AST* m_functionSpecifier; AST* m_storageSpecifier; TypeSpecifierAST* m_typeSpec; InitDeclaratorListAST* m_initDeclaratorList; AST* m_winDeclSpec;private: SimpleDeclarationAST(const SimpleDeclarationAST &source); void operator = (const SimpleDeclarationAST &source);};class ExpressionStatementAST: public StatementAST{public: enum { Type = NodeType_ExpressionStatement };public: ExpressionStatementAST(); inline AbstractExpressionAST *expression() const { return m_expression; } void setExpression(AbstractExpressionAST *expression);private: AbstractExpressionAST* m_expression;private: ExpressionStatementAST(const ExpressionStatementAST &source); void operator = (const ExpressionStatementAST &source);};class ReturnStatementAST: public StatementAST{public: enum { Type = NodeType_ReturnStatement };public: ReturnStatementAST(); inline AbstractExpressionAST *expression() const { return m_expression; } void setExpression(AbstractExpressionAST *expression);private: AbstractExpressionAST* m_expression;private: ReturnStatementAST(const ReturnStatementAST &source); void operator = (const ReturnStatementAST &source);};class ConditionAST: public AST{public: enum { Type = NodeType_Condition };public: ConditionAST(); inline TypeSpecifierAST *typeSpec() const { return m_typeSpec; } void setTypeSpec(TypeSpecifierAST *typeSpec); inline DeclaratorAST *declarator() const { return m_declarator; } void setDeclarator(DeclaratorAST *declarator); inline AbstractExpressionAST *expression() const { return m_expression; } void setExpression(AbstractExpressionAST *expression);private: TypeSpecifierAST* m_typeSpec; DeclaratorAST* m_declarator; AbstractExpressionAST* m_expression;private: ConditionAST(const ConditionAST &source); void operator = (const ConditionAST &source);};class IfStatementAST: public StatementAST{public: enum { Type = NodeType_IfStatement };public: IfStatementAST(); inline ConditionAST *condition() const { return m_condition; } void setCondition(ConditionAST *condition); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement); inline StatementAST *elseStatement() const { return m_elseStatement; } void setElseStatement(StatementAST *statement);private: ConditionAST* m_condition; StatementAST* m_statement; StatementAST* m_elseStatement;private: IfStatementAST(const IfStatementAST &source); void operator = (const IfStatementAST &source);};class WhileStatementAST: public StatementAST{public: enum { Type = NodeType_WhileStatement };public: WhileStatementAST(); inline ConditionAST *condition() const { return m_condition; } void setCondition(ConditionAST *condition); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement);private: ConditionAST* m_condition; StatementAST* m_statement;private: WhileStatementAST(const WhileStatementAST &source); void operator = (const WhileStatementAST &source);};class DoStatementAST: public StatementAST{public: enum { Type = NodeType_DoStatement };public: DoStatementAST(); inline ConditionAST *condition() const { return m_condition; } void setCondition(ConditionAST *condition); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement);private: ConditionAST* m_condition; StatementAST* m_statement;private: DoStatementAST(const DoStatementAST &source); void operator = (const DoStatementAST &source);};class ForStatementAST: public StatementAST{public: enum { Type = NodeType_ForStatement };public: ForStatementAST(); inline StatementAST *initStatement() const { return m_initStatement; } void setInitStatement(StatementAST *statement); inline ConditionAST *condition() const { return m_condition; } void setCondition(ConditionAST *condition); inline AbstractExpressionAST *expression() const { return m_expression; } void setExpression(AbstractExpressionAST *expression); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement);private: ConditionAST* m_condition; StatementAST* m_initStatement; StatementAST* m_statement; AbstractExpressionAST* m_expression;private: ForStatementAST(const ForStatementAST &source); void operator = (const ForStatementAST &source);};class SwitchStatementAST: public StatementAST{public: enum { Type = NodeType_SwitchStatement };public: SwitchStatementAST(); inline ConditionAST *condition() const { return m_condition; } void setCondition(ConditionAST *condition); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement);private: ConditionAST* m_condition; StatementAST* m_statement;private: SwitchStatementAST(const SwitchStatementAST &source); void operator = (const SwitchStatementAST &source);};class StatementListAST: public StatementAST{public: enum { Type = NodeType_StatementList };public: StatementListAST(); inline List<StatementAST *> *statementList() const { return m_statementList; } void addStatement(StatementAST *statement);private: List<StatementAST *> *m_statementList;private: StatementListAST(const StatementListAST &source); void operator = (const StatementListAST &source);};class DeclarationStatementAST: public StatementAST{public: enum { Type = NodeType_DeclarationStatement };public: DeclarationStatementAST(); inline DeclarationAST *declaration() const { return m_declaration; } void setDeclaration(DeclarationAST *declaration);private: DeclarationAST* m_declaration;private: DeclarationStatementAST(const DeclarationStatementAST &source); void operator = (const DeclarationStatementAST &source);};/* LabeledStatementAST: case constant-expression : statement default : statement (expression is 0)*/class LabeledStatementAST: public StatementAST{public: enum { Type = NodeType_LabeledStatement };public: LabeledStatementAST(); inline StatementAST *statement() const { return m_statement; } void setStatement(StatementAST *statement); inline AbstractExpressionAST *expression() const { return m_expression; } void setExpression(AbstractExpressionAST *expression);private: StatementAST* m_statement; AbstractExpressionAST *m_expression;private: LabeledStatementAST(const LabeledStatementAST &source); void operator = (const LabeledStatementAST &source);};class FunctionDefinitionAST: public DeclarationAST{public: enum { Type = NodeType_FunctionDefinition };public: FunctionDefinitionAST(); inline AST *functionSpecifier() const { return m_functionSpecifier; } void setFunctionSpecifier(AST *functionSpecifier); inline AST *storageSpecifier() const { return m_storageSpecifier; } void setStorageSpecifier(AST *storageSpecifier); inline TypeSpecifierAST *typeSpec() const { return m_typeSpec; } void setTypeSpec(TypeSpecifierAST *typeSpec); inline InitDeclaratorAST *initDeclarator() const { return m_initDeclarator; } void setInitDeclarator(InitDeclaratorAST *initDeclarator); inline StatementListAST *functionBody() const { return m_functionBody; } void setFunctionBody(StatementListAST *functionBody); inline AST *winDeclSpec() const { return m_winDeclSpec; } void setWinDeclSpec(AST *winDeclSpec);private: AST* m_functionSpecifier; AST* m_storageSpecifier; TypeSpecifierAST* m_typeSpec; InitDeclaratorAST* m_initDeclarator; StatementListAST* m_functionBody; AST* m_winDeclSpec;private: FunctionDefinitionAST(const FunctionDefinitionAST &source); void operator = (const FunctionDefinitionAST &source);};class TranslationUnitAST: public AST{public: enum { Type = NodeType_TranslationUnit };public: TranslationUnitAST(); void addDeclaration(DeclarationAST *ast); inline List<DeclarationAST *> *declarationList() const { return m_declarationList; }private: List<DeclarationAST *> *m_declarationList;private: TranslationUnitAST(const TranslationUnitAST &source); void operator = (const TranslationUnitAST &source);};template <class T> T* CreateNode(pool *p){ T* node = new (p->allocate(sizeof(T))) T; node->setNodeType(T::Type); node->_pool = p; return node;}template <int kind> ExpressionAST<kind> *CreateExpression(pool *p){ ExpressionAST<kind>* node = new (p->allocate(sizeof(ExpressionAST<kind>))) ExpressionAST<kind>; node->setNodeType(kind); node->_pool = p; return node;}/*template <typename T>inline List<T *> *snoc(List<T *> *e, T *d, pool *p){ if (!e) e = new (p->allocate(sizeof(List<T*>))) List<T *>(p); e->append(d); return e; }*///Workaround for ICE on MSVC, use macro instead of template.#define SNOC(ListType, ListValueType) \inline ListType *snoc(ListType *e, ListValueType *d, pool *p) \{ if (!e) e = new (p->allocate(sizeof(ListType))) ListType(p); e->append(d); return e; }SNOC(List<AST *>, AST)SNOC(List<ClassOrNamespaceNameAST *>, ClassOrNamespaceNameAST)SNOC(List<BaseSpecifierAST *>, BaseSpecifierAST)SNOC(List<DeclarationAST *>, DeclarationAST)SNOC(List<EnumeratorAST *>, EnumeratorAST)SNOC(List<ParameterDeclarationAST *>, ParameterDeclarationAST)SNOC(List<InitDeclaratorAST *>, InitDeclaratorAST)SNOC(List<TemplateParameterAST *>, TemplateParameterAST)SNOC(List<StatementAST *>, StatementAST)#endif // AST_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -