--- /dev/null
+#ifndef CXXTOKEN_HXX
+#define CXXTOKEN_HXX
+
+#include <iostream.h>
+#include <stdlib.h>
+
+#define YYSTYPE CxxTokenType
+#define YY_parse_STYPE CxxTokenType
+#define YACC_BANG_TYPE size_t
+#define YACC_MARK_TYPE size_t
+
+#define YACC_BANG() push_bang()
+#define YACC_UNBANG(bangValue, msg) pop_bang(bangValue); yyerrok; yyclearin; yyerror(msg);
+
+#define ERRMSG(a) do { cout << "ERROR -- " << a << endl; increment_error_count(); } while (0)
+
+#ifdef NEEDS_BOOL
+enum bool { false, true };
+#endif
+
+#ifdef BISON_PP_CLASS
+#define PARSE_TOKEN(a) BISON_PP_CLASS::a
+#else
+#define PARSE_TOKEN(a) a
+#endif
+
+extern size_t line_number;
+extern bool c_keywords;
+extern bool echo_line_numbers;
+extern bool echo_line_text;
+extern void increment_error_count();
+extern int tokenMarkDepth;
+
+class CxxToken
+{
+ int _value;
+private:
+ CxxToken(const CxxToken&);
+ CxxToken& operator=(const CxxToken&);
+public:
+ CxxToken(int tokenValue = 0) : _value(tokenValue) {}
+ virtual ~CxxToken() {}
+ int value() const { return _value; }
+};
+
+enum CxxIsTemplate { IS_DEFAULT, IS_TEMPLATE };
+enum CxxIsTree { IS_SCALAR, IS_TREE };
+typedef CxxToken CxxTreeArgument;
+
+class CxxStatement : public CxxToken {};
+typedef CxxStatement CxxDeclaration;
+class CxxExpression : public CxxStatement {};
+class CxxName : public CxxExpression {};
+class CxxTokens : public CxxToken {};
+class CxxMetaObject : public CxxExpression {};
+class CxxMetaStatement : public CxxStatement {};
+
+class CxxStatements : public CxxStatement {};
+typedef CxxStatements CxxDeclarations;
+typedef CxxDeclarations CxxMemberDeclarations;
+typedef CxxExpression CxxTreeExpression;
+
+class CxxKeyword : public CxxName {};
+class CxxDeclSpecifierId : public CxxKeyword {};
+
+class CxxAccessSpecifier : public CxxKeyword {};
+class CxxBaseSpecifier : public CxxToken {};
+class CxxBaseSpecifiers : public CxxTokens {};
+class CxxBrace : public CxxToken {};
+class CxxBuiltInId : public CxxName {};
+class CxxCharacterLiteral : public CxxToken {};
+class CxxClass : public CxxToken {};
+class CxxClassKey : public CxxKeyword {};
+class CxxCondition : public CxxExpression {};
+class CxxCvQualifiers : public CxxDeclSpecifierId {};
+class CxxDeclarator : public CxxToken {};
+typedef CxxExpression CxxDeleteExpression;
+//class CxxDerived : public CxxToken {};
+//class CxxEnum : public CxxToken {};
+class CxxEnumerator : public CxxToken {};
+class CxxEnumerators : public CxxTokens {};
+class CxxExceptionDeclaration : public CxxToken {};
+class CxxExceptionSpecification : public CxxToken {};
+class CxxExpressions : public CxxExpression {};
+class CxxFileId : public CxxToken {};
+class CxxFileIds : public CxxTokens {};
+class CxxFileName : public CxxToken {};
+class CxxFloatingLiteral : public CxxToken {};
+class CxxFunctionBody : public CxxStatement {};
+class CxxFunctionDeclarations : public CxxDeclarations {};
+class CxxHandler : public CxxToken {};
+class CxxHandlers : public CxxTokens {};
+class CxxIdentifier : public CxxName {};
+//class CxxIds : public CxxTokens {};
+class CxxInitializerClause : public CxxExpression {};
+class CxxInitializerClauses : public CxxInitializerClause {};
+class CxxIntegerLiteral : public CxxToken {};
+class CxxLine : public CxxToken {};
+//class CxxList : public CxxTokens {};
+class CxxMemInitializer : public CxxToken {};
+class CxxMemInitializers : public CxxTokens {};
+class CxxMetaClass : public CxxStatement {};
+class CxxMetaFunction : public CxxMetaObject {};
+class CxxMetaInitializer : public CxxToken {};
+class CxxMetaInitializers : public CxxTokens {};
+class CxxMetaParameter : public CxxToken {};
+class CxxMetaParameters : public CxxTokens {};
+//class CxxMetaPrototype : public CxxToken {};
+//class CxxMetaPrototypes : public CxxTokens {};
+class CxxMetaType : public CxxName {};
+class CxxMetaVariable : public CxxMetaObject {};
+class CxxNamespace : public CxxToken {};
+typedef CxxExpression CxxNewExpression;
+class CxxNumberLiteral : public CxxExpression {};
+class CxxParameter : public CxxExpression {};
+class CxxParameters : public CxxExpression {};
+class CxxParenthesised : public CxxToken {};
+class CxxPointerDeclarator : public CxxDeclarator {};
+class CxxPosition : public CxxName {};
+class CxxSegment : public CxxName {};
+class CxxSpacing : public CxxToken {};
+class CxxStrings : public CxxToken {};
+typedef CxxStrings CxxStringLiteral;
+class CxxSubspace : public CxxToken {};
+class CxxSyntaxMacroParameter : public CxxToken {};
+class CxxSyntaxMacroParameters : public CxxTokens {};
+class CxxTemplateArgument : public CxxToken {};
+class CxxTemplateArguments : public CxxTokens {};
+class CxxTemplateParameter : public CxxToken {};
+class CxxTemplateParameters : public CxxTokens {};
+class CxxSimpleTypeParameter : public CxxTemplateParameter {};
+class CxxTemplatedTypeParameter : public CxxTemplateParameter {};
+class CxxTokenStatements : public CxxTokens {};
+class CxxTreeArguments : public CxxTokens {};
+class CxxType1Parameters : public CxxTokens {};
+class CxxTypeId : public CxxToken {};
+class CxxTypeIds : public CxxTokens {};
+class CxxUtility : public CxxToken {};
+
+#define FOGPARSERVALUE_ENUM(T,N) \
+ const T *name2(u_,N); \
+ const T& N() const { return *name2(u_,N); } \
+ const T* & N() { return name2(u_,N); }
+#define FOGPARSERVALUE_POINTER(T,N) T *N;
+#define FOGPARSERVALUE_VALUE(T,N) T N;
+
+union CxxTokenType
+{
+ CxxToken *_token;
+
+ FOGPARSERVALUE_VALUE(bool, _bool)
+ FOGPARSERVALUE_VALUE(long, _long)
+ FOGPARSERVALUE_POINTER(CxxBrace, brace)
+ FOGPARSERVALUE_POINTER(CxxSpacing, spacing)
+
+ FOGPARSERVALUE_POINTER(CxxAccessSpecifier, access_specifier)
+ FOGPARSERVALUE_POINTER(CxxBaseSpecifier, base_specifier)
+ FOGPARSERVALUE_POINTER(CxxBaseSpecifiers, base_specifiers)
+ FOGPARSERVALUE_POINTER(CxxBuiltInId, built_in_id)
+ FOGPARSERVALUE_POINTER(CxxCharacterLiteral, character_literal)
+ FOGPARSERVALUE_POINTER(CxxClass, _class)
+ FOGPARSERVALUE_POINTER(CxxClassKey, class_key)
+ FOGPARSERVALUE_POINTER(CxxCondition, condition)
+ FOGPARSERVALUE_POINTER(CxxCvQualifiers, cv_qualifiers)
+ FOGPARSERVALUE_POINTER(CxxDeclSpecifierId, decl_specifier_id)
+ FOGPARSERVALUE_POINTER(CxxDeclaration, declaration)
+ FOGPARSERVALUE_POINTER(CxxDeclarations, declarations)
+ FOGPARSERVALUE_POINTER(CxxDeclarator, declarator)
+ FOGPARSERVALUE_POINTER(CxxDeleteExpression, delete_expression)
+ FOGPARSERVALUE_POINTER(CxxEnumerator, enumerator)
+ FOGPARSERVALUE_POINTER(CxxEnumerators, enumerators)
+ FOGPARSERVALUE_POINTER(CxxExceptionDeclaration, exception_declaration)
+ FOGPARSERVALUE_POINTER(CxxExceptionSpecification, exception_specification)
+ FOGPARSERVALUE_POINTER(CxxExpression, expression)
+ FOGPARSERVALUE_POINTER(CxxExpressions, expressions)
+ FOGPARSERVALUE_POINTER(CxxFileId, file_id)
+ FOGPARSERVALUE_POINTER(CxxFileIds, file_ids)
+ FOGPARSERVALUE_POINTER(CxxFileName, file_name)
+ FOGPARSERVALUE_POINTER(CxxFloatingLiteral, floating_literal)
+ FOGPARSERVALUE_POINTER(CxxFunctionBody, function_body)
+ FOGPARSERVALUE_POINTER(CxxHandler, handler)
+ FOGPARSERVALUE_POINTER(CxxHandlers, handlers)
+ FOGPARSERVALUE_POINTER(CxxIdentifier, identifier)
+ FOGPARSERVALUE_POINTER(CxxInitializerClause, initializer_clause)
+ FOGPARSERVALUE_POINTER(CxxInitializerClauses, initializer_clauses)
+ FOGPARSERVALUE_POINTER(CxxIntegerLiteral, integer_literal)
+ FOGPARSERVALUE_POINTER(CxxKeyword, keyword)
+ FOGPARSERVALUE_POINTER(CxxLine, line)
+ FOGPARSERVALUE_POINTER(CxxMemInitializer, mem_initializer)
+ FOGPARSERVALUE_POINTER(CxxMemInitializers, mem_initializers)
+ FOGPARSERVALUE_POINTER(CxxMemberDeclarations, member_declarations)
+ FOGPARSERVALUE_POINTER(CxxMetaClass, meta_class)
+ FOGPARSERVALUE_POINTER(CxxMetaFunction, meta_function)
+ FOGPARSERVALUE_POINTER(CxxMetaInitializer, meta_initializer)
+ FOGPARSERVALUE_POINTER(CxxMetaInitializers, meta_initializers)
+ FOGPARSERVALUE_POINTER(CxxMetaObject, meta_object)
+ FOGPARSERVALUE_POINTER(CxxMetaStatement, meta_statement)
+ FOGPARSERVALUE_POINTER(CxxMetaType, meta_type)
+ FOGPARSERVALUE_POINTER(CxxMetaVariable, meta_variable)
+ FOGPARSERVALUE_POINTER(CxxName, name)
+ FOGPARSERVALUE_POINTER(CxxNewExpression, new_expression)
+ FOGPARSERVALUE_POINTER(CxxNumberLiteral, number_literal)
+ FOGPARSERVALUE_POINTER(CxxParameter, parameter)
+ FOGPARSERVALUE_POINTER(CxxParameters, parameters)
+ FOGPARSERVALUE_POINTER(CxxParenthesised, parenthesised)
+ FOGPARSERVALUE_POINTER(CxxPointerDeclarator, pointer_declarator)
+ FOGPARSERVALUE_POINTER(CxxPosition, position)
+ FOGPARSERVALUE_POINTER(CxxSegment, segment)
+ FOGPARSERVALUE_POINTER(CxxSimpleTypeParameter, simple_type_parameter)
+ FOGPARSERVALUE_POINTER(CxxStatement, statement)
+ FOGPARSERVALUE_POINTER(CxxStatements, statements)
+ FOGPARSERVALUE_POINTER(CxxStringLiteral, string_literal)
+ FOGPARSERVALUE_POINTER(CxxStrings, strings)
+ FOGPARSERVALUE_POINTER(CxxSubspace, subspace)
+ FOGPARSERVALUE_POINTER(CxxSyntaxMacroParameter, syntax_macro_parameter)
+ FOGPARSERVALUE_POINTER(CxxSyntaxMacroParameters, syntax_macro_parameters)
+ FOGPARSERVALUE_POINTER(CxxTemplateArgument, template_argument)
+ FOGPARSERVALUE_POINTER(CxxTemplateArguments, template_arguments)
+ FOGPARSERVALUE_POINTER(CxxTemplateParameter, template_parameter)
+ FOGPARSERVALUE_POINTER(CxxTemplateParameters, template_parameters)
+ FOGPARSERVALUE_POINTER(CxxTemplatedTypeParameter, templated_type_parameter)
+ FOGPARSERVALUE_POINTER(CxxToken, token)
+ FOGPARSERVALUE_POINTER(CxxTokenStatements, token_statements)
+ FOGPARSERVALUE_POINTER(CxxTokens, tokens)
+ FOGPARSERVALUE_POINTER(CxxTreeArgument, tree_argument)
+ FOGPARSERVALUE_POINTER(CxxTreeArguments, tree_arguments)
+ FOGPARSERVALUE_POINTER(CxxTreeExpression, tree_expression)
+ FOGPARSERVALUE_POINTER(CxxType1Parameters, type1_parameters)
+ FOGPARSERVALUE_POINTER(CxxUtility, utility)
+
+ FOGPARSERVALUE_VALUE(int, bang)
+ FOGPARSERVALUE_VALUE(CxxIsTemplate, is_template)
+ FOGPARSERVALUE_VALUE(YACC_MARK_TYPE, mark)
+ FOGPARSERVALUE_VALUE(size_t, nest)
+#if 0
+ CxxAccessSpecifier *access_specifier;
+ CxxBaseSpecifier *base_specifier;
+ CxxBaseSpecifiers *base_specifiers;
+ CxxBuiltInId *built_in_id;
+ CxxCharacterLiteral *character_literal;
+ CxxClass *_class;
+ CxxClassKey *class_key;
+ CxxCondition *condition;
+ CxxCvQualifiers *cv_qualifiers;
+ CxxDeclaration *declaration;
+ CxxDeclarations *declarations;
+ CxxDeclarator *declarator;
+ CxxDeclSpecifierId *decl_specifier_id;
+// CxxDerived *derived;
+// CxxEnum *_enum;
+ CxxEnumerator *enumerator;
+ CxxEnumerators *enumerators;
+ CxxExceptionDeclaration *exception_declaration;
+ CxxExceptionSpecification *exception_specification;
+ CxxExpression *expression;
+ CxxExpressions *expressions;
+ CxxFileId *file_id;
+ CxxFileIds *file_ids;
+ CxxFileName *file_name;
+ CxxFloatingLiteral *floating_literal;
+ CxxFunctionBody *function_body;
+ CxxFunctionDeclarations *function_declarations;
+ CxxHandler *handler;
+ CxxHandlers *handlers;
+ CxxIdentifier *identifier;
+// CxxIds *ids;
+ CxxInitializerClause *initializer_clause;
+ CxxInitializerClauses *initializer_clauses;
+ CxxIntegerLiteral *integer_literal;
+ CxxKeyword *keyword;
+ CxxLine *line;
+// CxxList *list;
+ CxxMemInitializer *mem_initializer;
+ CxxMemInitializers *mem_initializers;
+ CxxMemberDeclarations *member_declarations;
+ CxxMetaClass *meta_class;
+// CxxMetaFunction *meta_function;
+// CxxMetaInitializer *meta_initializer;
+// CxxMetaInitializers *meta_initializers;
+// CxxMetaObject *meta_object;
+ CxxMetaParameter *meta_parameter;
+ CxxMetaParameters *meta_parameters;
+// CxxMetaPrototype *meta_prototype;
+// CxxMetaPrototypes *meta_prototypes;
+// CxxMetaStatement *meta_statement;
+ CxxMetaType *meta_type;
+// CxxMetaVariable *meta_variable;
+ CxxName *name;
+// CxxNamespace *_namespace;
+ CxxNumberLiteral *number_literal;
+ CxxParameter *parameter;
+ CxxParameters *parameters;
+ CxxParenthesised *parenthesised;
+ CxxPointerDeclarator *pointer_declarator;
+ CxxSegment *segment;
+ CxxSimpleTypeParameter *simple_type_parameter;
+ CxxStatement *statement;
+ CxxStatements *statements;
+ CxxStringLiteral *string_literal;
+ CxxStrings *strings;
+ CxxSyntaxMacroParameter *syntax_macro_parameter;
+ CxxSyntaxMacroParameters *syntax_macro_parameters;
+ CxxTemplateArgument *template_argument;
+ CxxTemplateArguments *template_arguments;
+ CxxTemplateParameter *template_parameter;
+ CxxTemplateParameters *template_parameters;
+ CxxTemplatedTypeParameter *templated_type_parameter;
+ CxxToken *token;
+ CxxTokens *tokens;
+// CxxTreeArgument *tree_argument;
+// CxxTreeArguments *tree_arguments;
+// CxxTreeExpression *tree_expression;
+ CxxType1Parameters *type1_parameters;
+// CxxTypeId *type_id;
+// CxxTypeIds *type_ids;
+ CxxUtility *utility;
+ YACC_BANG_TYPE bang;
+ YACC_MARK_TYPE mark;
+ size_t nest;
+#endif
+};
+
+class CxxNaffToken : public CxxToken
+{
+ typedef CxxToken Super;
+ char *_text;
+ int _leng;
+private:
+ CxxNaffToken(const CxxNaffToken&);
+ CxxNaffToken& operator=(const CxxNaffToken&);
+public:
+ CxxNaffToken(int tokenValue, const char *yyText, int yyLeng);
+ virtual ~CxxNaffToken();
+};
+
+#endif