parser.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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 :
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
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
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
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
This file is part of the documentation for KDevelop Version 3.1.2.