KDevelop API Documentation

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.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:35 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003