1
/* This file is part of KDevelop
2
Copyright (C) 2002,2003 Roberto Raggi <roberto@kdevelop.org>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public
6
License as published by the Free Software Foundation; either
7
version 2 of the License, or (at your option) any later version.
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public License
15
along with this library; see the file COPYING.LIB. If not, write to
16
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
Boston, MA 02111-1307, USA.
26
#include <qstringlist.h>
27
#include <qvaluelist.h>
28
#include <qvaluestack.h>
30
struct ParserPrivateData;
40
Parser( Driver* driver, Lexer* lexer );
44
virtual bool reportError( const Error& err );
45
/** @todo remove*/ virtual bool reportError( const QString& msg );
46
/** @todo remove*/ virtual void syntaxError();
50
bool parseTranslationUnit( TranslationUnitAST::Node& node );
52
bool parseDeclaration( DeclarationAST::Node& node );
53
bool parseBlockDeclaration( DeclarationAST::Node& node );
54
bool parseLinkageSpecification( DeclarationAST::Node& node );
55
bool parseLinkageBody( LinkageBodyAST::Node& node );
56
bool parseNamespace( DeclarationAST::Node& node );
57
bool parseNamespaceAliasDefinition( DeclarationAST::Node& node );
58
bool parseUsing( DeclarationAST::Node& node );
59
bool parseUsingDirective( DeclarationAST::Node& node );
60
bool parseTypedef( DeclarationAST::Node& node );
61
bool parseAsmDefinition( DeclarationAST::Node& node );
62
bool parseTemplateDeclaration( DeclarationAST::Node& node );
63
bool parseDeclarationInternal( DeclarationAST::Node& node );
65
bool parseUnqualifiedName( ClassOrNamespaceNameAST::Node& node );
66
bool parseStringLiteral( AST::Node& node );
67
bool parseName( NameAST::Node& node );
68
bool parseOperatorFunctionId( AST::Node& node );
69
bool parseTemplateArgumentList( TemplateArgumentListAST::Node& node, bool reportError=true );
70
bool parseOperator( AST::Node& node );
71
bool parseCvQualify( GroupAST::Node& node );
72
bool parseSimpleTypeSpecifier( TypeSpecifierAST::Node& node );
73
bool parsePtrOperator( AST::Node& node );
74
bool parseTemplateArgument( AST::Node& node );
75
bool parseTypeSpecifier( TypeSpecifierAST::Node& node );
76
bool parseTypeSpecifierOrClassSpec( TypeSpecifierAST::Node& node );
77
bool parseDeclarator( DeclaratorAST::Node& node );
78
bool parseTemplateParameterList( TemplateParameterListAST::Node& node );
79
bool parseTemplateParameter( TemplateParameterAST::Node& node );
80
bool parseStorageClassSpecifier( GroupAST::Node& node );
81
bool parseFunctionSpecifier( GroupAST::Node& node );
82
bool parseInitDeclaratorList( InitDeclaratorListAST::Node& node );
83
bool parseInitDeclarator( InitDeclaratorAST::Node& node );
84
bool parseParameterDeclarationClause( ParameterDeclarationClauseAST::Node& node );
85
bool parseCtorInitializer( AST::Node& node );
86
bool parsePtrToMember( AST::Node& node );
87
bool parseEnumSpecifier( TypeSpecifierAST::Node& node );
88
bool parseClassSpecifier( TypeSpecifierAST::Node& node );
89
bool parseWinDeclSpec( GroupAST::Node& node );
90
bool parseElaboratedTypeSpecifier( TypeSpecifierAST::Node& node );
91
bool parseDeclaratorId( NameAST::Node& node );
92
bool parseExceptionSpecification( GroupAST::Node& node );
93
bool parseEnumerator( EnumeratorAST::Node& node );
94
bool parseTypeParameter( TypeParameterAST::Node& node );
95
bool parseParameterDeclaration( ParameterDeclarationAST::Node& node );
96
bool parseTypeId( AST::Node& node );
97
bool parseAbstractDeclarator( DeclaratorAST::Node& node );
98
bool parseParameterDeclarationList( ParameterDeclarationListAST::Node& node );
99
bool parseMemberSpecification( DeclarationAST::Node& node );
100
bool parseAccessSpecifier( AST::Node& node );
101
bool parseTypeIdList( GroupAST::Node& node );
102
bool parseMemInitializerList( AST::Node& node );
103
bool parseMemInitializer( AST::Node& node );
104
bool parseInitializer( AST::Node& node );
105
bool parseBaseClause( BaseClauseAST::Node& node );
106
bool parseBaseSpecifier( BaseSpecifierAST::Node& node );
107
bool parseInitializerClause( AST::Node& node );
108
bool parseMemInitializerId( NameAST::Node& node );
109
bool parseFunctionBody( StatementListAST::Node& node );
112
bool skipExpression( AST::Node& node );
113
bool skipCommaExpression( AST::Node& node );
114
bool skipExpressionStatement( StatementAST::Node& node );
116
bool parseExpression( AST::Node& node );
117
bool parsePrimaryExpression( AST::Node& node );
118
bool parsePostfixExpression( AST::Node& node );
119
bool parseUnaryExpression( AST::Node& node );
120
bool parseNewExpression( AST::Node& node );
121
bool parseNewTypeId( AST::Node& node );
122
bool parseNewDeclarator( AST::Node& node );
123
bool parseNewInitializer( AST::Node& node );
124
bool parseDeleteExpression( AST::Node& node );
125
bool parseCastExpression( AST::Node& node );
126
bool parsePmExpression( AST::Node& node );
127
bool parseMultiplicativeExpression( AST::Node& node );
128
bool parseAdditiveExpression( AST::Node& node );
129
bool parseShiftExpression( AST::Node& node );
130
bool parseRelationalExpression( AST::Node& node, bool templArgs=false );
131
bool parseEqualityExpression( AST::Node& node, bool templArgs=false );
132
bool parseAndExpression( AST::Node& node, bool templArgs=false );
133
bool parseExclusiveOrExpression( AST::Node& node, bool templArgs=false );
134
bool parseInclusiveOrExpression( AST::Node& node, bool templArgs=false );
135
bool parseLogicalAndExpression( AST::Node& node, bool templArgs=false );
136
bool parseLogicalOrExpression( AST::Node& node, bool templArgs=false );
137
bool parseConditionalExpression( AST::Node& node );
138
bool parseAssignmentExpression( AST::Node& node );
139
bool parseConstantExpression( AST::Node& node );
140
bool parseCommaExpression( AST::Node& node );
141
bool parseThrowExpression( AST::Node& node );
144
bool parseCondition( ConditionAST::Node& node );
145
bool parseStatement( StatementAST::Node& node );
146
bool parseWhileStatement( StatementAST::Node& node );
147
bool parseDoStatement( StatementAST::Node& node );
148
bool parseForStatement( StatementAST::Node& node );
149
bool parseForEachStatement( StatementAST::Node& node ); // qt4 [erbsland]
150
bool parseCompoundStatement( StatementAST::Node& node );
151
bool parseForInitStatement( StatementAST::Node& node );
152
bool parseIfStatement( StatementAST::Node& node );
153
bool parseSwitchStatement( StatementAST::Node& node );
154
bool parseLabeledStatement( StatementAST::Node& node );
155
bool parseDeclarationStatement( StatementAST::Node& node );
156
bool parseTryBlockStatement( StatementAST::Node& node );
159
bool parseObjcDef( DeclarationAST::Node& node );
160
bool parseObjcClassDef( DeclarationAST::Node& node );
161
bool parseObjcClassDecl( DeclarationAST::Node& node );
162
bool parseObjcProtocolDecl( DeclarationAST::Node& node );
163
bool parseObjcAliasDecl( DeclarationAST::Node& node );
164
bool parseObjcProtocolDef( DeclarationAST::Node& node );
165
bool parseObjcMethodDef( DeclarationAST::Node& node );
167
bool parseIvarDeclList( AST::Node& node );
168
bool parseIvarDecls( AST::Node& node );
169
bool parseIvarDecl( AST::Node& node );
170
bool parseIvars( AST::Node& node );
171
bool parseIvarDeclarator( AST::Node& node );
172
bool parseMethodDecl( AST::Node& node );
173
bool parseUnarySelector( AST::Node& node );
174
bool parseKeywordSelector( AST::Node& node );
175
bool parseSelector( AST::Node& node );
176
bool parseKeywordDecl( AST::Node& node );
177
bool parseReceiver( AST::Node& node );
178
bool parseObjcMessageExpr( AST::Node& node );
179
bool parseMessageArgs( AST::Node& node );
180
bool parseKeywordExpr( AST::Node& node );
181
bool parseKeywordArgList( AST::Node& node );
182
bool parseKeywordArg( AST::Node& node );
183
bool parseReservedWord( AST::Node& node );
184
bool parseMyParms( AST::Node& node );
185
bool parseMyParm( AST::Node& node );
186
bool parseOptParmList( AST::Node& node );
187
bool parseObjcSelectorExpr( AST::Node& node );
188
bool parseSelectorArg( AST::Node& node );
189
bool parseKeywordNameList( AST::Node& node );
190
bool parseKeywordName( AST::Node& node );
191
bool parseObjcEncodeExpr( AST::Node& node );
192
bool parseObjcString( AST::Node& node );
193
bool parseProtocolRefs( AST::Node& node );
194
bool parseIdentifierList( GroupAST::Node& node );
195
bool parseIdentifierColon( AST::Node& node );
196
bool parseObjcProtocolExpr( AST::Node& node );
197
bool parseObjcOpenBracketExpr( AST::Node& node );
198
bool parseObjcCloseBracket( AST::Node& node );
201
bool skipUntil( int token );
202
bool skipUntilDeclaration();
203
bool skipUntilStatement();
204
bool skip( int l, int r );
205
QString toString( int start, int end, const QString& sep=" " ) const;
208
ParserPrivateData* d;
216
Parser( const Parser& source );
217
void operator = ( const Parser& source );