~ubuntu-branches/debian/sid/kdevelop/sid

« back to all changes in this revision

Viewing changes to lib/cppparser/parser.h

  • Committer: Bazaar Package Importer
  • Author(s): Jeremy Lainé
  • Date: 2006-05-23 18:39:42 UTC
  • Revision ID: james.westby@ubuntu.com-20060523183942-hucifbvh68k2bwz7
Tags: upstream-3.3.2
Import upstream version 3.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of KDevelop
 
2
    Copyright (C) 2002,2003 Roberto Raggi <roberto@kdevelop.org>
 
3
 
 
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.
 
8
 
 
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.
 
13
 
 
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.
 
18
*/
 
19
 
 
20
#ifndef PARSER_H
 
21
#define PARSER_H
 
22
 
 
23
#include "ast.h"
 
24
 
 
25
#include <qstring.h>
 
26
#include <qstringlist.h>
 
27
#include <qvaluelist.h>
 
28
#include <qvaluestack.h>
 
29
 
 
30
struct ParserPrivateData;
 
31
 
 
32
class Driver;
 
33
class Lexer;
 
34
class Token;
 
35
struct Error;
 
36
 
 
37
class Parser
 
38
{
 
39
public:
 
40
    Parser( Driver* driver, Lexer* lexer );
 
41
    virtual ~Parser();
 
42
 
 
43
private:
 
44
    virtual bool reportError( const Error& err );
 
45
    /** @todo remove*/ virtual bool reportError( const QString& msg );
 
46
    /** @todo remove*/ virtual void syntaxError();
 
47
 
 
48
public /*rules*/ :
 
49
 
 
50
    bool parseTranslationUnit( TranslationUnitAST::Node& node );
 
51
 
 
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 );
 
64
    
 
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 );
 
110
 
 
111
    // expression
 
112
    bool skipExpression( AST::Node& node );
 
113
    bool skipCommaExpression( AST::Node& node );
 
114
    bool skipExpressionStatement( StatementAST::Node& node );
 
115
 
 
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 );
 
142
 
 
143
    // statement
 
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 );
 
157
    
 
158
    // objective c
 
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 );
 
166
    
 
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 );
 
199
  
 
200
    
 
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;
 
206
 
 
207
private:
 
208
    ParserPrivateData* d;
 
209
    Driver* m_driver;
 
210
    Lexer* lex;
 
211
    int m_problems;
 
212
    int m_maxProblems;
 
213
    bool objcp;
 
214
 
 
215
private:
 
216
    Parser( const Parser& source );
 
217
    void operator = ( const Parser& source );
 
218
};
 
219
 
 
220
 
 
221
#endif