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