KDevelop API Documentation

lib/cppparser/parser.h

Go to the documentation of this file.
00001 /* This file is part of KDevelop 00002 Copyright (C) 2002,2003 Roberto Raggi <roberto@kdevelop.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef PARSER_H 00021 #define PARSER_H 00022 00023 #include "ast.h" 00024 00025 #include <qstring.h> 00026 #include <qstringlist.h> 00027 #include <qvaluelist.h> 00028 #include <qvaluestack.h> 00029 00030 struct ParserPrivateData; 00031 00032 class Driver; 00033 class Lexer; 00034 class Token; 00035 struct Error; 00036 00037 class Parser 00038 { 00039 public: 00040 Parser( Driver* driver, Lexer* lexer ); 00041 virtual ~Parser(); 00042 00043 private: 00044 virtual bool reportError( const Error& err ); virtual bool reportError( const QString& msg ); virtual void syntaxError(); 00047 00048 public /*rules*/ : 00049 00050 bool parseTranslationUnit( TranslationUnitAST::Node& node ); 00051 00052 bool parseDeclaration( DeclarationAST::Node& node ); 00053 bool parseBlockDeclaration( DeclarationAST::Node& node ); 00054 bool parseLinkageSpecification( DeclarationAST::Node& node ); 00055 bool parseLinkageBody( LinkageBodyAST::Node& node ); 00056 bool parseNamespace( DeclarationAST::Node& node ); 00057 bool parseNamespaceAliasDefinition( DeclarationAST::Node& node ); 00058 bool parseUsing( DeclarationAST::Node& node ); 00059 bool parseUsingDirective( DeclarationAST::Node& node ); 00060 bool parseTypedef( DeclarationAST::Node& node ); 00061 bool parseAsmDefinition( DeclarationAST::Node& node ); 00062 bool parseTemplateDeclaration( DeclarationAST::Node& node ); 00063 bool parseDeclarationInternal( DeclarationAST::Node& node ); 00064 00065 bool parseUnqualifiedName( ClassOrNamespaceNameAST::Node& node ); 00066 bool parseStringLiteral( AST::Node& node ); 00067 bool parseName( NameAST::Node& node ); 00068 bool parseOperatorFunctionId( AST::Node& node ); 00069 bool parseTemplateArgumentList( TemplateArgumentListAST::Node& node, bool reportError=true ); 00070 bool parseOperator( AST::Node& node ); 00071 bool parseCvQualify( GroupAST::Node& node ); 00072 bool parseSimpleTypeSpecifier( TypeSpecifierAST::Node& node ); 00073 bool parsePtrOperator( AST::Node& node ); 00074 bool parseTemplateArgument( AST::Node& node ); 00075 bool parseTypeSpecifier( TypeSpecifierAST::Node& node ); 00076 bool parseTypeSpecifierOrClassSpec( TypeSpecifierAST::Node& node ); 00077 bool parseDeclarator( DeclaratorAST::Node& node ); 00078 bool parseTemplateParameterList( TemplateParameterListAST::Node& node ); 00079 bool parseTemplateParameter( TemplateParameterAST::Node& node ); 00080 bool parseStorageClassSpecifier( GroupAST::Node& node ); 00081 bool parseFunctionSpecifier( GroupAST::Node& node ); 00082 bool parseInitDeclaratorList( InitDeclaratorListAST::Node& node ); 00083 bool parseInitDeclarator( InitDeclaratorAST::Node& node ); 00084 bool parseParameterDeclarationClause( ParameterDeclarationClauseAST::Node& node ); 00085 bool parseCtorInitializer( AST::Node& node ); 00086 bool parsePtrToMember( AST::Node& node ); 00087 bool parseEnumSpecifier( TypeSpecifierAST::Node& node ); 00088 bool parseClassSpecifier( TypeSpecifierAST::Node& node ); 00089 bool parseWinDeclSpec( GroupAST::Node& node ); 00090 bool parseElaboratedTypeSpecifier( TypeSpecifierAST::Node& node ); 00091 bool parseDeclaratorId( NameAST::Node& node ); 00092 bool parseExceptionSpecification( GroupAST::Node& node ); 00093 bool parseEnumerator( EnumeratorAST::Node& node ); 00094 bool parseTypeParameter( TypeParameterAST::Node& node ); 00095 bool parseParameterDeclaration( ParameterDeclarationAST::Node& node ); 00096 bool parseTypeId( AST::Node& node ); 00097 bool parseAbstractDeclarator( DeclaratorAST::Node& node ); 00098 bool parseParameterDeclarationList( ParameterDeclarationListAST::Node& node ); 00099 bool parseMemberSpecification( DeclarationAST::Node& node ); 00100 bool parseAccessSpecifier( AST::Node& node ); 00101 bool parseTypeIdList( GroupAST::Node& node ); 00102 bool parseMemInitializerList( AST::Node& node ); 00103 bool parseMemInitializer( AST::Node& node ); 00104 bool parseInitializer( AST::Node& node ); 00105 bool parseBaseClause( BaseClauseAST::Node& node ); 00106 bool parseBaseSpecifier( BaseSpecifierAST::Node& node ); 00107 bool parseInitializerClause( AST::Node& node ); 00108 bool parseMemInitializerId( NameAST::Node& node ); 00109 bool parseFunctionBody( StatementListAST::Node& node ); 00110 00111 // expression 00112 bool skipExpression( AST::Node& node ); 00113 bool skipCommaExpression( AST::Node& node ); 00114 bool skipExpressionStatement( StatementAST::Node& node ); 00115 00116 bool parseExpression( AST::Node& node ); 00117 bool parsePrimaryExpression( AST::Node& node ); 00118 bool parsePostfixExpression( AST::Node& node ); 00119 bool parseUnaryExpression( AST::Node& node ); 00120 bool parseNewExpression( AST::Node& node ); 00121 bool parseNewTypeId( AST::Node& node ); 00122 bool parseNewDeclarator( AST::Node& node ); 00123 bool parseNewInitializer( AST::Node& node ); 00124 bool parseDeleteExpression( AST::Node& node ); 00125 bool parseCastExpression( AST::Node& node ); 00126 bool parsePmExpression( AST::Node& node ); 00127 bool parseMultiplicativeExpression( AST::Node& node ); 00128 bool parseAdditiveExpression( AST::Node& node ); 00129 bool parseShiftExpression( AST::Node& node ); 00130 bool parseRelationalExpression( AST::Node& node, bool templArgs=false ); 00131 bool parseEqualityExpression( AST::Node& node, bool templArgs=false ); 00132 bool parseAndExpression( AST::Node& node, bool templArgs=false ); 00133 bool parseExclusiveOrExpression( AST::Node& node, bool templArgs=false ); 00134 bool parseInclusiveOrExpression( AST::Node& node, bool templArgs=false ); 00135 bool parseLogicalAndExpression( AST::Node& node, bool templArgs=false ); 00136 bool parseLogicalOrExpression( AST::Node& node, bool templArgs=false ); 00137 bool parseConditionalExpression( AST::Node& node ); 00138 bool parseAssignmentExpression( AST::Node& node ); 00139 bool parseConstantExpression( AST::Node& node ); 00140 bool parseCommaExpression( AST::Node& node ); 00141 bool parseThrowExpression( AST::Node& node ); 00142 00143 // statement 00144 bool parseCondition( ConditionAST::Node& node ); 00145 bool parseStatement( StatementAST::Node& node ); 00146 bool parseWhileStatement( StatementAST::Node& node ); 00147 bool parseDoStatement( StatementAST::Node& node ); 00148 bool parseForStatement( StatementAST::Node& node ); 00149 bool parseCompoundStatement( StatementAST::Node& node ); 00150 bool parseForInitStatement( StatementAST::Node& node ); 00151 bool parseIfStatement( StatementAST::Node& node ); 00152 bool parseSwitchStatement( StatementAST::Node& node ); 00153 bool parseLabeledStatement( StatementAST::Node& node ); 00154 bool parseDeclarationStatement( StatementAST::Node& node ); 00155 bool parseTryBlockStatement( StatementAST::Node& node ); 00156 00157 // objective c 00158 bool parseObjcDef( DeclarationAST::Node& node ); 00159 bool parseObjcClassDef( DeclarationAST::Node& node ); 00160 bool parseObjcClassDecl( DeclarationAST::Node& node ); 00161 bool parseObjcProtocolDecl( DeclarationAST::Node& node ); 00162 bool parseObjcAliasDecl( DeclarationAST::Node& node ); 00163 bool parseObjcProtocolDef( DeclarationAST::Node& node ); 00164 bool parseObjcMethodDef( DeclarationAST::Node& node ); 00165 00166 bool parseIvarDeclList( AST::Node& node ); 00167 bool parseIvarDecls( AST::Node& node ); 00168 bool parseIvarDecl( AST::Node& node ); 00169 bool parseIvars( AST::Node& node ); 00170 bool parseIvarDeclarator( AST::Node& node ); 00171 bool parseMethodDecl( AST::Node& node ); 00172 bool parseUnarySelector( AST::Node& node ); 00173 bool parseKeywordSelector( AST::Node& node ); 00174 bool parseSelector( AST::Node& node ); 00175 bool parseKeywordDecl( AST::Node& node ); 00176 bool parseReceiver( AST::Node& node ); 00177 bool parseObjcMessageExpr( AST::Node& node ); 00178 bool parseMessageArgs( AST::Node& node ); 00179 bool parseKeywordExpr( AST::Node& node ); 00180 bool parseKeywordArgList( AST::Node& node ); 00181 bool parseKeywordArg( AST::Node& node ); 00182 bool parseReservedWord( AST::Node& node ); 00183 bool parseMyParms( AST::Node& node ); 00184 bool parseMyParm( AST::Node& node ); 00185 bool parseOptParmList( AST::Node& node ); 00186 bool parseObjcSelectorExpr( AST::Node& node ); 00187 bool parseSelectorArg( AST::Node& node ); 00188 bool parseKeywordNameList( AST::Node& node ); 00189 bool parseKeywordName( AST::Node& node ); 00190 bool parseObjcEncodeExpr( AST::Node& node ); 00191 bool parseObjcString( AST::Node& node ); 00192 bool parseProtocolRefs( AST::Node& node ); 00193 bool parseIdentifierList( GroupAST::Node& node ); 00194 bool parseIdentifierColon( AST::Node& node ); 00195 bool parseObjcProtocolExpr( AST::Node& node ); 00196 bool parseObjcOpenBracketExpr( AST::Node& node ); 00197 bool parseObjcCloseBracket( AST::Node& node ); 00198 00199 00200 bool skipUntil( int token ); 00201 bool skipUntilDeclaration(); 00202 bool skipUntilStatement(); 00203 bool skip( int l, int r ); 00204 QString toString( int start, int end, const QString& sep=" " ) const; 00205 00206 private: 00207 ParserPrivateData* d; 00208 Driver* m_driver; 00209 Lexer* lex; 00210 int m_problems; 00211 int m_maxProblems; 00212 bool objcp; 00213 00214 private: 00215 Parser( const Parser& source ); 00216 void operator = ( const Parser& source ); 00217 }; 00218 00219 00220 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:48 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003