| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file cppBisonDefs.h
- * @author drose
- * @date 1999-01-17
- */
- #ifndef CPPBISON_H
- #define CPPBISON_H
- // This header file defines the interface to the yacc (actually, bison) parser
- // and grammar. None of these interfaces are intended to be used directly;
- // they're defined here strictly to be used by the CPPParser and
- // CPPExpressionParser classes.
- #include "dtoolbase.h"
- #include <string>
- #include "cppClosureType.h"
- #include "cppExtensionType.h"
- #include "cppFile.h"
- class CPPParser;
- class CPPExpression;
- class CPPPreprocessor;
- class CPPDeclaration;
- class CPPInstance;
- class CPPType;
- class CPPStructType;
- class CPPEnumType;
- class CPPSimpleType;
- class CPPInstanceIdentifier;
- class CPPParameterList;
- class CPPTemplateParameterList;
- class CPPScope;
- class CPPIdentifier;
- class CPPCaptureType;
- void parse_cpp(CPPParser *cp);
- CPPExpression *parse_const_expr(CPPPreprocessor *pp,
- CPPScope *new_current_scope,
- CPPScope *new_global_scope);
- CPPType *parse_type(CPPPreprocessor *pp,
- CPPScope *new_current_scope,
- CPPScope *new_global_scope);
- extern CPPScope *current_scope;
- extern CPPScope *global_scope;
- extern CPPPreprocessor *current_lexer;
- // This structure holds the return value for each token. Traditionally, this
- // is a union, and is declared with the %union declaration in the parser.y
- // file, but unions are pretty worthless in C++ (you can't include an object
- // that has member functions in a union), so we'll use a class instead. That
- // means we need to declare it externally, here.
- class cppyystype {
- public:
- std::string str;
- union {
- unsigned long long integer;
- long double real;
- CPPScope *scope;
- CPPDeclaration *decl;
- CPPInstance *instance;
- CPPType *type;
- CPPStructType *struct_type;
- CPPEnumType *enum_type;
- CPPSimpleType *simple_type;
- CPPInstanceIdentifier *inst_ident;
- CPPParameterList *param_list;
- CPPTemplateParameterList *template_param_list;
- CPPExtensionType::Type extension_enum;
- CPPExpression *expr;
- CPPIdentifier *identifier;
- CPPClosureType *closure_type;
- CPPClosureType::Capture *capture;
- } u;
- };
- #define YYSTYPE cppyystype
- // This structure takes advantage of a bison feature to track the exact
- // location in the file of each token, for more useful error reporting. We
- // define it up here so we can reference it in the lexer.
- struct cppyyltype {
- // Bison expects these members to be part of this struct.
- int first_line;
- int first_column;
- int last_line;
- int last_column;
- // Early versions of bison (1.25 and earlier) expected these members to be
- // in this struct as well.
- int timestamp;
- char *text;
- // The remaining members are added for this application and have no meaning
- // to bison.
- CPPFile file;
- };
- #define YYLTYPE cppyyltype
- // Beginning around bison 1.35 or so, we need to define this macro as well, to
- // tell bison how to collect multiple locations together. (The default
- // implementation copies only first_line through last_column, whereas here we
- // use the struct assignment operator to copy all the members of the
- // structure).
- #define YYLLOC_DEFAULT(Current, Rhs, N) \
- (Current) = (Rhs)[1]; \
- (Current).last_line = (Rhs)[N].last_line; \
- (Current).last_column = (Rhs)[N].last_column;
- #endif
|