/* translation of file(s)

	"abs.k"
	"main.k"
	"parse.k"
	"error.k"
	"occur.k"
	"util.k"
	"gen.k"
	"gutil.k"
	"pat.k"
 */
/* generated by:
 *  @(#)$Author$
 */
#ifndef KC_TYPES_HEADER
#define KC_TYPES_HEADER

#define KIMWITUVERSIONMAJOR 2
#define KIMWITUVERSIONMINOR 3
#define KIMWITUVERSIONMICRO 6

#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <stddef.h>
#include <string>

namespace kc {

#ifndef INTEGER
# define INTEGER int
#endif
#ifndef REAL
# define REAL double
#endif

typedef char kc_cchar_t;
typedef unsigned short kc_wchar_t;

typedef std::string kc_cstring_t;

#ifdef KC_UNICODE
#define kc_t(TEXT) L ## TEXT
typedef std::wstring kc_wstring_t;
typedef kc_wchar_t kc_char;
typedef kc_wstring_t kc_string_t;

#if defined(_WIN32) && ! defined (__GNUC__)
#define kc_strlen wcslen
#define kc_strcmp wcscmp
#define kc_strcasecmp _wcsicmp
#define kc_strcpy wcscpy
#define kc_strncpy wcsncpy
#define kc_tolower towlower
#define kc_print_integer(buf,number) swprintf(buf,kc_t("%d"),number)
#define kc_print_real(buf,number) swprintf(buf,kc_t("%g"),number)

// needed for printdot and csgio only
inline
kc_cstring_t kc_to_cstring(const kc_wstring_t& s) {
    USES_CONVERSION;
    return W2CA(s.c_str());
}

// needed for csgio only
inline
kc_wstring_t kc_to_wstring(const kc_cstring_t& s) {
    USES_CONVERSION;
    return A2CW(s.c_str());
}

#else
// if you want to use UNICODE on other platforms you have to write the following functions by your own
int kc_strlen(const kc_char*);
int kc_strcmp(const kc_char*,const kc_char*);
int kc_strcasecmp(const kc_char*,const kc_char*);
int kc_strcpy(kc_char*,const kc_char*);
int kc_strncpy(kc_char*,const kc_char*, int);
kc_char kc_tolower(kc_char);
int kc_print_integer(kc_char* buffer, INTEGER number );
int kc_print_real(kc_char* buffer, REAL number);

// needed for printdot and csgio only
kc_cstring_t kc_to_cstring(const kc_wstring_t& );
// needed for csgio only
kc_wstring_t kc_to_wstring(const kc_cstring_t& );

#endif

#else // !KC_UNICODE

#define kc_t(TEXT) TEXT  
typedef kc_cchar_t kc_char;
typedef kc_cstring_t kc_string_t;

#define kc_strlen strlen
#define kc_strcmp strcmp
#if defined(_WIN32) && ! defined (__GNUC__)
#define kc_strcasecmp _stricmp
#else
#define kc_strcasecmp strcasecmp
#endif
#define kc_strcpy strcpy
#define kc_strncpy strncpy
#define kc_tolower tolower  
#define kc_print_integer(buf,number) sprintf(buf,kc_t("%d"),number)
#define kc_print_real(buf,number) sprintf(buf,kc_t("%g"),number)
#endif
class uview_class;
typedef uview_class& uview;
typedef const uview_class& c_uview;

typedef class printer_functor_class& printer_functor;
typedef void (*printer_function)(const kc_char*, uview);

class rview_class;
typedef rview_class& rview;
typedef const rview_class& c_rview;

}

// Some compilers know __attribute__. Right now we test for the GNU compiler
// and Intel's icc (for ia32) and ecc (for ia64).
#if !defined __GNUC__ && !defined __ICC && !defined __ECC
# define __attribute__(x)
#endif

// Since all definitions are in namespace kc now, there is no need
// give them a kc_ prefix. Old code may still rely on the prefix, so these
// macros are generated for backwards compatibility
#ifdef KC_DEPRECATED
#define kc_PhylumInfo           phylum_info
#define kc_OperatorInfo         operator_info
#define kc_last_uview           last_uview
#define kc_uviews               uviews
#define kc_rviews               rviews
#define kc_ht_reuse             ht_clear
#define kc_ht_clear             ht_clear
#define kc_ht_assign            ht_assign
#define kc_ht_assigned          ht_assigned
#define kc_phylum_nocasestring phylum_nocasestring
#define kc_tag_nocasestring_NoCaseStr impl_nocasestring_NoCaseStr
#define kc_phylum_casestring phylum_casestring
#define kc_tag_casestring__Str impl_casestring__Str
#define kc_phylum_real phylum_real
#define kc_tag_real__Real impl_real__Real
#define kc_phylum_integer phylum_integer
#define kc_tag_integer__Int impl_integer__Int
#define kc_phylum_voidptr phylum_voidptr
#define kc_tag_voidptr__VoidPtr impl_voidptr__VoidPtr
#define kc_phylum_uniqID phylum_uniqID
#define kc_tag_uniqID_Str impl_uniqID_Str
#define kc_phylum_ID phylum_ID
#define kc_tag_ID_Id impl_ID_Id
#define kc_phylum_INT phylum_INT
#define kc_tag_INT_Int impl_INT_Int
#define kc_phylum_STRING phylum_STRING
#define kc_tag_STRING_String impl_STRING_String
#define kc_phylum_phylumdeclarationsroot phylum_phylumdeclarationsroot
#define kc_tag_phylumdeclarationsroot_PhylumDeclarations impl_phylumdeclarationsroot_PhylumDeclarations
#define kc_phylum_phylumdeclarations phylum_phylumdeclarations
#define kc_tag_phylumdeclarations_Nilphylumdeclarations impl_phylumdeclarations_Nilphylumdeclarations
#define kc_tag_phylumdeclarations_Consphylumdeclarations impl_phylumdeclarations_Consphylumdeclarations
#define kc_phylum_phylumnames phylum_phylumnames
#define kc_tag_phylumnames_Nilphylumnames impl_phylumnames_Nilphylumnames
#define kc_tag_phylumnames_Consphylumnames impl_phylumnames_Consphylumnames
#define kc_phylum_phylumdeclaration phylum_phylumdeclaration
#define kc_tag_phylumdeclaration_PhylumDeclaration impl_phylumdeclaration_PhylumDeclaration
#define kc_phylum_storageoption phylum_storageoption
#define kc_tag_storageoption_NoStorageOption impl_storageoption_NoStorageOption
#define kc_tag_storageoption_NegativeStorageOption impl_storageoption_NegativeStorageOption
#define kc_tag_storageoption_PositiveStorageOption impl_storageoption_PositiveStorageOption
#define kc_phylum_storageclasses phylum_storageclasses
#define kc_tag_storageclasses_Nilstorageclasses impl_storageclasses_Nilstorageclasses
#define kc_tag_storageclasses_Consstorageclasses impl_storageclasses_Consstorageclasses
#define kc_phylum_productionblock phylum_productionblock
#define kc_tag_productionblock_Emptyproductionblock impl_productionblock_Emptyproductionblock
#define kc_tag_productionblock_ListAlternatives impl_productionblock_ListAlternatives
#define kc_tag_productionblock_NonlistAlternatives impl_productionblock_NonlistAlternatives
#define kc_tag_productionblock_PredefinedAlternatives impl_productionblock_PredefinedAlternatives
#define kc_phylum_alternatives phylum_alternatives
#define kc_tag_alternatives_Nilalternatives impl_alternatives_Nilalternatives
#define kc_tag_alternatives_Consalternatives impl_alternatives_Consalternatives
#define kc_phylum_alternative phylum_alternative
#define kc_tag_alternative_Alternative impl_alternative_Alternative
#define kc_phylum_arguments phylum_arguments
#define kc_tag_arguments_Nilarguments impl_arguments_Nilarguments
#define kc_tag_arguments_Consarguments impl_arguments_Consarguments
#define kc_phylum_argument phylum_argument
#define kc_tag_argument_Argument impl_argument_Argument
#define kc_phylum_Ccode_option phylum_Ccode_option
#define kc_tag_Ccode_option_CcodeOption impl_Ccode_option_CcodeOption
#define kc_phylum_attributes phylum_attributes
#define kc_tag_attributes_Nilattributes impl_attributes_Nilattributes
#define kc_tag_attributes_Consattributes impl_attributes_Consattributes
#define kc_phylum_attribute phylum_attribute
#define kc_tag_attribute_Attribute impl_attribute_Attribute
#define kc_phylum_attribute_initialisation_option phylum_attribute_initialisation_option
#define kc_tag_attribute_initialisation_option_Noattribute_initialisation impl_attribute_initialisation_option_Noattribute_initialisation
#define kc_tag_attribute_initialisation_option_Yesattribute_initialisation impl_attribute_initialisation_option_Yesattribute_initialisation
#define kc_phylum_Cexpression phylum_Cexpression
#define kc_tag_Cexpression_NilCexpression impl_Cexpression_NilCexpression
#define kc_tag_Cexpression_ConsCexpression impl_Cexpression_ConsCexpression
#define kc_phylum_Cexpression_elem phylum_Cexpression_elem
#define kc_tag_Cexpression_elem_CExpressionPart impl_Cexpression_elem_CExpressionPart
#define kc_tag_Cexpression_elem_CExpressionDollarvar impl_Cexpression_elem_CExpressionDollarvar
#define kc_tag_Cexpression_elem_CExpressionNl impl_Cexpression_elem_CExpressionNl
#define kc_tag_Cexpression_elem_CExpressionDQ impl_Cexpression_elem_CExpressionDQ
#define kc_tag_Cexpression_elem_CExpressionSQ impl_Cexpression_elem_CExpressionSQ
#define kc_tag_Cexpression_elem_CExpressionPack impl_Cexpression_elem_CExpressionPack
#define kc_tag_Cexpression_elem_CExpressionArray impl_Cexpression_elem_CExpressionArray
#define kc_phylum_CexpressionDQ phylum_CexpressionDQ
#define kc_tag_CexpressionDQ_NilCexpressionDQ impl_CexpressionDQ_NilCexpressionDQ
#define kc_tag_CexpressionDQ_ConsCexpressionDQ impl_CexpressionDQ_ConsCexpressionDQ
#define kc_phylum_CexpressionDQ_elem phylum_CexpressionDQ_elem
#define kc_tag_CexpressionDQ_elem_CExpressionDQPart impl_CexpressionDQ_elem_CExpressionDQPart
#define kc_tag_CexpressionDQ_elem_CExpressionDQNl impl_CexpressionDQ_elem_CExpressionDQNl
#define kc_phylum_CexpressionSQ phylum_CexpressionSQ
#define kc_tag_CexpressionSQ_NilCexpressionSQ impl_CexpressionSQ_NilCexpressionSQ
#define kc_tag_CexpressionSQ_ConsCexpressionSQ impl_CexpressionSQ_ConsCexpressionSQ
#define kc_phylum_CexpressionSQ_elem phylum_CexpressionSQ_elem
#define kc_tag_CexpressionSQ_elem_CExpressionSQPart impl_CexpressionSQ_elem_CExpressionSQPart
#define kc_tag_CexpressionSQ_elem_CExpressionSQNl impl_CexpressionSQ_elem_CExpressionSQNl
#define kc_phylum_idCexpressions phylum_idCexpressions
#define kc_tag_idCexpressions_NilidCexpressions impl_idCexpressions_NilidCexpressions
#define kc_tag_idCexpressions_ConsidCexpressions impl_idCexpressions_ConsidCexpressions
#define kc_phylum_idCexpression phylum_idCexpression
#define kc_tag_idCexpression_IdCexpression impl_idCexpression_IdCexpression
#define kc_phylum_Ctexts phylum_Ctexts
#define kc_tag_Ctexts_NilCtexts impl_Ctexts_NilCtexts
#define kc_tag_Ctexts_ConsCtexts impl_Ctexts_ConsCtexts
#define kc_phylum_includefiles phylum_includefiles
#define kc_tag_includefiles_Nilincludefiles impl_includefiles_Nilincludefiles
#define kc_tag_includefiles_Consincludefiles impl_includefiles_Consincludefiles
#define kc_phylum_includefile phylum_includefile
#define kc_tag_includefile_IncludeFile impl_includefile_IncludeFile
#define kc_phylum_includedeclarations phylum_includedeclarations
#define kc_tag_includedeclarations_Nilincludedeclarations impl_includedeclarations_Nilincludedeclarations
#define kc_tag_includedeclarations_Consincludedeclarations impl_includedeclarations_Consincludedeclarations
#define kc_phylum_includedeclaration phylum_includedeclaration
#define kc_tag_includedeclaration_IncludeDeclaration impl_includedeclaration_IncludeDeclaration
#define kc_phylum_rwdeclarations phylum_rwdeclarations
#define kc_tag_rwdeclarations_Nilrwdeclarations impl_rwdeclarations_Nilrwdeclarations
#define kc_tag_rwdeclarations_Consrwdeclarations impl_rwdeclarations_Consrwdeclarations
#define kc_phylum_rwdeclaration phylum_rwdeclaration
#define kc_tag_rwdeclaration_RwDeclaration impl_rwdeclaration_RwDeclaration
#define kc_phylum_rewriteclauses phylum_rewriteclauses
#define kc_tag_rewriteclauses_Nilrewriteclauses impl_rewriteclauses_Nilrewriteclauses
#define kc_tag_rewriteclauses_Consrewriteclauses impl_rewriteclauses_Consrewriteclauses
#define kc_phylum_rewriteclause phylum_rewriteclause
#define kc_tag_rewriteclause_RewriteClause impl_rewriteclause_RewriteClause
#define kc_phylum_patternchains phylum_patternchains
#define kc_tag_patternchains_Nilpatternchains impl_patternchains_Nilpatternchains
#define kc_tag_patternchains_Conspatternchains impl_patternchains_Conspatternchains
#define kc_phylum_patternchain phylum_patternchain
#define kc_tag_patternchain_Nilpatternchain impl_patternchain_Nilpatternchain
#define kc_tag_patternchain_Conspatternchain impl_patternchain_Conspatternchain
#define kc_phylum_outmostpatterns phylum_outmostpatterns
#define kc_tag_outmostpatterns_Niloutmostpatterns impl_outmostpatterns_Niloutmostpatterns
#define kc_tag_outmostpatterns_Consoutmostpatterns impl_outmostpatterns_Consoutmostpatterns
#define kc_phylum_patternchainitem phylum_patternchainitem
#define kc_tag_patternchainitem_PatternchainitemOutmost impl_patternchainitem_PatternchainitemOutmost
#define kc_tag_patternchainitem_PatternchainitemGroup impl_patternchainitem_PatternchainitemGroup
#define kc_tag_patternchainitem_PatternchainitemDollarid impl_patternchainitem_PatternchainitemDollarid
#define kc_phylum_outmostpattern phylum_outmostpattern
#define kc_tag_outmostpattern_OPOperatorWildcard impl_outmostpattern_OPOperatorWildcard
#define kc_tag_outmostpattern_OPOperator impl_outmostpattern_OPOperator
#define kc_tag_outmostpattern_OPNonLeafVariable impl_outmostpattern_OPNonLeafVariable
#define kc_tag_outmostpattern_OPWildcard impl_outmostpattern_OPWildcard
#define kc_tag_outmostpattern_OPDefault impl_outmostpattern_OPDefault
#define kc_phylum_pattern phylum_pattern
#define kc_tag_pattern_PVariable impl_pattern_PVariable
#define kc_tag_pattern_POperator impl_pattern_POperator
#define kc_tag_pattern_PNonLeafVariable impl_pattern_PNonLeafVariable
#define kc_tag_pattern_PWildcard impl_pattern_PWildcard
#define kc_tag_pattern_PStringLiteral impl_pattern_PStringLiteral
#define kc_tag_pattern_PIntLiteral impl_pattern_PIntLiteral
#define kc_phylum_patterns phylum_patterns
#define kc_tag_patterns_Nilpatterns impl_patterns_Nilpatterns
#define kc_tag_patterns_Conspatterns impl_patterns_Conspatterns
#define kc_phylum_term phylum_term
#define kc_tag_term_TVariable impl_term_TVariable
#define kc_tag_term_TOperator impl_term_TOperator
#define kc_tag_term_TMethod impl_term_TMethod
#define kc_tag_term_TMethodDot impl_term_TMethodDot
#define kc_tag_term_TMemberVar impl_term_TMemberVar
#define kc_tag_term_TMemberVarDot impl_term_TMemberVarDot
#define kc_tag_term_TCTerm impl_term_TCTerm
#define kc_tag_term_TStringLiteral impl_term_TStringLiteral
#define kc_tag_term_TIntLiteral impl_term_TIntLiteral
#define kc_phylum_terms phylum_terms
#define kc_tag_terms_Nilterms impl_terms_Nilterms
#define kc_tag_terms_Consterms impl_terms_Consterms
#define kc_phylum_fnfiles phylum_fnfiles
#define kc_tag_fnfiles_Nilfnfiles impl_fnfiles_Nilfnfiles
#define kc_tag_fnfiles_Consfnfiles impl_fnfiles_Consfnfiles
#define kc_phylum_fnfile phylum_fnfile
#define kc_tag_fnfile_FnFile impl_fnfile_FnFile
#define kc_phylum_fndeclarations phylum_fndeclarations
#define kc_tag_fndeclarations_Nilfndeclarations impl_fndeclarations_Nilfndeclarations
#define kc_tag_fndeclarations_Consfndeclarations impl_fndeclarations_Consfndeclarations
#define kc_phylum_fndeclaration phylum_fndeclaration
#define kc_tag_fndeclaration_FnAcDeclaration impl_fndeclaration_FnAcDeclaration
#define kc_tag_fndeclaration_AcMemberDeclaration impl_fndeclaration_AcMemberDeclaration
#define kc_phylum_fnclass phylum_fnclass
#define kc_tag_fnclass_GlobalFn impl_fnclass_GlobalFn
#define kc_tag_fnclass_StaticFn impl_fnclass_StaticFn
#define kc_tag_fnclass_MemberFn impl_fnclass_MemberFn
#define kc_tag_fnclass_ConstructorFn impl_fnclass_ConstructorFn
#define kc_tag_fnclass_DestructorFn impl_fnclass_DestructorFn
#define kc_tag_fnclass_ConvOperatorFn impl_fnclass_ConvOperatorFn
#define kc_phylum_Ctext phylum_Ctext
#define kc_tag_Ctext_NilCtext impl_Ctext_NilCtext
#define kc_tag_Ctext_ConsCtext impl_Ctext_ConsCtext
#define kc_phylum_Ctext_elem phylum_Ctext_elem
#define kc_tag_Ctext_elem_CTextLine impl_Ctext_elem_CTextLine
#define kc_tag_Ctext_elem_CTextDollarVar impl_Ctext_elem_CTextDollarVar
#define kc_tag_Ctext_elem_CTextNl impl_Ctext_elem_CTextNl
#define kc_tag_Ctext_elem_CTextCexpressionDQ impl_Ctext_elem_CTextCexpressionDQ
#define kc_tag_Ctext_elem_CTextCexpressionSQ impl_Ctext_elem_CTextCexpressionSQ
#define kc_tag_Ctext_elem_CTextCbody impl_Ctext_elem_CTextCbody
#define kc_tag_Ctext_elem_CTextForeachexpression impl_Ctext_elem_CTextForeachexpression
#define kc_tag_Ctext_elem_CTextWithexpression impl_Ctext_elem_CTextWithexpression
#define kc_phylum_foreach_after phylum_foreach_after
#define kc_tag_foreach_after_NoForeachAfter impl_foreach_after_NoForeachAfter
#define kc_tag_foreach_after_ForeachAfter impl_foreach_after_ForeachAfter
#define kc_phylum_contextinfo phylum_contextinfo
#define kc_tag_contextinfo_InForeachContext impl_contextinfo_InForeachContext
#define kc_tag_contextinfo_NotInForeachContext impl_contextinfo_NotInForeachContext
#define kc_phylum_withexpressions phylum_withexpressions
#define kc_tag_withexpressions_Nilwithexpressions impl_withexpressions_Nilwithexpressions
#define kc_tag_withexpressions_Conswithexpressions impl_withexpressions_Conswithexpressions
#define kc_phylum_withexpression phylum_withexpression
#define kc_tag_withexpression_WEVariable impl_withexpression_WEVariable
#define kc_tag_withexpression_WECexpression impl_withexpression_WECexpression
#define kc_phylum_withcases phylum_withcases
#define kc_tag_withcases_Nilwithcases impl_withcases_Nilwithcases
#define kc_tag_withcases_Conswithcases impl_withcases_Conswithcases
#define kc_phylum_withcase phylum_withcase
#define kc_tag_withcase_Withcase impl_withcase_Withcase
#define kc_phylum_unparsedeclarations phylum_unparsedeclarations
#define kc_tag_unparsedeclarations_Nilunparsedeclarations impl_unparsedeclarations_Nilunparsedeclarations
#define kc_tag_unparsedeclarations_Consunparsedeclarations impl_unparsedeclarations_Consunparsedeclarations
#define kc_phylum_unparsedeclaration phylum_unparsedeclaration
#define kc_tag_unparsedeclaration_UnparseDeclaration impl_unparsedeclaration_UnparseDeclaration
#define kc_phylum_unparseclauses phylum_unparseclauses
#define kc_tag_unparseclauses_Nilunparseclauses impl_unparseclauses_Nilunparseclauses
#define kc_tag_unparseclauses_Consunparseclauses impl_unparseclauses_Consunparseclauses
#define kc_phylum_unparseclause phylum_unparseclause
#define kc_tag_unparseclause_UnparseClause impl_unparseclause_UnparseClause
#define kc_phylum_viewnames phylum_viewnames
#define kc_tag_viewnames_Nilviewnames impl_viewnames_Nilviewnames
#define kc_tag_viewnames_Consviewnames impl_viewnames_Consviewnames
#define kc_phylum_unparseitems phylum_unparseitems
#define kc_tag_unparseitems_Nilunparseitems impl_unparseitems_Nilunparseitems
#define kc_tag_unparseitems_Consunparseitems impl_unparseitems_Consunparseitems
#define kc_phylum_unparseitem phylum_unparseitem
#define kc_tag_unparseitem_UnpStr impl_unparseitem_UnpStr
#define kc_tag_unparseitem_UnpSubexpr impl_unparseitem_UnpSubexpr
#define kc_tag_unparseitem_UnpCtext impl_unparseitem_UnpCtext
#define kc_tag_unparseitem_UnpBody impl_unparseitem_UnpBody
#define kc_tag_unparseitem_UViewVarDecl impl_unparseitem_UViewVarDecl
#define kc_phylum_unpsubterm phylum_unpsubterm
#define kc_tag_unpsubterm_UnpSubTerm impl_unpsubterm_UnpSubTerm
#define kc_tag_unpsubterm_UnpDollarvarTerm impl_unpsubterm_UnpDollarvarTerm
#define kc_tag_unpsubterm_UnpSubAttr impl_unpsubterm_UnpSubAttr
#define kc_tag_unpsubterm_UnpDollarvarAttr impl_unpsubterm_UnpDollarvarAttr
#define kc_tag_unpsubterm_UnpCastedVariable impl_unpsubterm_UnpCastedVariable
#define kc_phylum_unpattributes phylum_unpattributes
#define kc_tag_unpattributes_Nilunpattributes impl_unpattributes_Nilunpattributes
#define kc_tag_unpattributes_Consunpattributes impl_unpattributes_Consunpattributes
#define kc_phylum_viewnameoption phylum_viewnameoption
#define kc_tag_viewnameoption_NoViewname impl_viewnameoption_NoViewname
#define kc_tag_viewnameoption_YesViewname impl_viewnameoption_YesViewname
#define kc_phylum_languageoption phylum_languageoption
#define kc_tag_languageoption_NoLanguagename impl_languageoption_NoLanguagename
#define kc_tag_languageoption_LanguageList impl_languageoption_LanguageList
#define kc_phylum_languagenames phylum_languagenames
#define kc_tag_languagenames_Nillanguagenames impl_languagenames_Nillanguagenames
#define kc_tag_languagenames_Conslanguagenames impl_languagenames_Conslanguagenames
#define kc_phylum_fileline phylum_fileline
#define kc_tag_fileline_FileLine impl_fileline_FileLine
#define kc_tag_fileline_NoFileLine impl_fileline_NoFileLine
#define kc_tag_fileline_PosNoFileLine impl_fileline_PosNoFileLine
#define kc_phylum_scopetypefilelinestack phylum_scopetypefilelinestack
#define kc_tag_scopetypefilelinestack_Nilscopetypefilelinestack impl_scopetypefilelinestack_Nilscopetypefilelinestack
#define kc_tag_scopetypefilelinestack_Consscopetypefilelinestack impl_scopetypefilelinestack_Consscopetypefilelinestack
#define kc_phylum_scopetypefileline phylum_scopetypefileline
#define kc_tag_scopetypefileline_ScopeTypeFileLine impl_scopetypefileline_ScopeTypeFileLine
#define kc_phylum_IDtype phylum_IDtype
#define kc_tag_IDtype_ITUnknown impl_IDtype_ITUnknown
#define kc_tag_IDtype_ITPredefinedPhylum impl_IDtype_ITPredefinedPhylum
#define kc_tag_IDtype_ITUserPhylum impl_IDtype_ITUserPhylum
#define kc_tag_IDtype_ITPredefinedOperator impl_IDtype_ITPredefinedOperator
#define kc_tag_IDtype_ITUserOperator impl_IDtype_ITUserOperator
#define kc_tag_IDtype_ITPredefinedStorageClass impl_IDtype_ITPredefinedStorageClass
#define kc_tag_IDtype_ITStorageClass impl_IDtype_ITStorageClass
#define kc_tag_IDtype_ITPredefinedUView impl_IDtype_ITPredefinedUView
#define kc_tag_IDtype_ITUserUView impl_IDtype_ITUserUView
#define kc_tag_IDtype_ITUViewVar impl_IDtype_ITUViewVar
#define kc_tag_IDtype_ITPredefinedRView impl_IDtype_ITPredefinedRView
#define kc_tag_IDtype_ITUserRView impl_IDtype_ITUserRView
#define kc_tag_IDtype_ITUserFunction impl_IDtype_ITUserFunction
#define kc_tag_IDtype_ITPatternVariable impl_IDtype_ITPatternVariable
#define kc_tag_IDtype_ITLanguageName impl_IDtype_ITLanguageName
#define kc_phylum_operators phylum_operators
#define kc_tag_operators_Niloperators impl_operators_Niloperators
#define kc_tag_operators_Consoperators impl_operators_Consoperators
#define kc_phylum_phyla phylum_phyla
#define kc_tag_phyla_Nilphyla impl_phyla_Nilphyla
#define kc_tag_phyla_Consphyla impl_phyla_Consphyla
#define kc_phylum_variables phylum_variables
#define kc_tag_variables_Nilvariables impl_variables_Nilvariables
#define kc_tag_variables_Consvariables impl_variables_Consvariables
#define kc_phylum_dollarvarstatus phylum_dollarvarstatus
#define kc_tag_dollarvarstatus_DVAllowed impl_dollarvarstatus_DVAllowed
#define kc_tag_dollarvarstatus_DVDisallowed impl_dollarvarstatus_DVDisallowed
#define kc_phylum_tribool phylum_tribool
#define kc_tag_tribool_Equal impl_tribool_Equal
#define kc_tag_tribool_Smaller impl_tribool_Smaller
#define kc_tag_tribool_Bigger impl_tribool_Bigger
#define kc_phylum_patternrepresentations phylum_patternrepresentations
#define kc_tag_patternrepresentations_Nilpatternrepresentations impl_patternrepresentations_Nilpatternrepresentations
#define kc_tag_patternrepresentations_Conspatternrepresentations impl_patternrepresentations_Conspatternrepresentations
#define kc_phylum_patternrepresentation phylum_patternrepresentation
#define kc_tag_patternrepresentation_Nilpatternrepresentation impl_patternrepresentation_Nilpatternrepresentation
#define kc_tag_patternrepresentation_Conspatternrepresentation impl_patternrepresentation_Conspatternrepresentation
#define kc_phylum_elem_patternrepresentation phylum_elem_patternrepresentation
#define kc_tag_elem_patternrepresentation_PRBinding impl_elem_patternrepresentation_PRBinding
#define kc_tag_elem_patternrepresentation_PRVarPredicate impl_elem_patternrepresentation_PRVarPredicate
#define kc_tag_elem_patternrepresentation_PROperPredicate impl_elem_patternrepresentation_PROperPredicate
#define kc_tag_elem_patternrepresentation_PRUserPredicate impl_elem_patternrepresentation_PRUserPredicate
#define kc_tag_elem_patternrepresentation_PRNonLeafBinding impl_elem_patternrepresentation_PRNonLeafBinding
#define kc_tag_elem_patternrepresentation_PRWildcard impl_elem_patternrepresentation_PRWildcard
#define kc_tag_elem_patternrepresentation_PRDefault impl_elem_patternrepresentation_PRDefault
#define kc_tag_elem_patternrepresentation_PRStringLiteral impl_elem_patternrepresentation_PRStringLiteral
#define kc_tag_elem_patternrepresentation_PRIntLiteral impl_elem_patternrepresentation_PRIntLiteral
#define kc_phylum_path phylum_path
#define kc_tag_path_Nilpath impl_path_Nilpath
#define kc_tag_path_Conspath impl_path_Conspath
#define kc_phylum_paths phylum_paths
#define kc_tag_paths_Nilpaths impl_paths_Nilpaths
#define kc_tag_paths_Conspaths impl_paths_Conspaths
#define kc_phylum_argsnumbers phylum_argsnumbers
#define kc_tag_argsnumbers_Nilargsnumbers impl_argsnumbers_Nilargsnumbers
#define kc_tag_argsnumbers_Consargsnumbers impl_argsnumbers_Consargsnumbers
#define kc_phylum_rewriterulesinfo phylum_rewriterulesinfo
#define kc_tag_rewriterulesinfo_Nilrewriterulesinfo impl_rewriterulesinfo_Nilrewriterulesinfo
#define kc_tag_rewriterulesinfo_Consrewriterulesinfo impl_rewriterulesinfo_Consrewriterulesinfo
#define kc_phylum_rewriteruleinfo phylum_rewriteruleinfo
#define kc_tag_rewriteruleinfo_Rewriteruleinfo impl_rewriteruleinfo_Rewriteruleinfo
#define kc_phylum_withcasesinfo phylum_withcasesinfo
#define kc_tag_withcasesinfo_Nilwithcasesinfo impl_withcasesinfo_Nilwithcasesinfo
#define kc_tag_withcasesinfo_Conswithcasesinfo impl_withcasesinfo_Conswithcasesinfo
#define kc_phylum_withcaseinfo phylum_withcaseinfo
#define kc_tag_withcaseinfo_Withcaseinfo impl_withcaseinfo_Withcaseinfo
#define kc_phylum_rewriteviewsinfo phylum_rewriteviewsinfo
#define kc_tag_rewriteviewsinfo_Nilrewriteviewsinfo impl_rewriteviewsinfo_Nilrewriteviewsinfo
#define kc_tag_rewriteviewsinfo_Consrewriteviewsinfo impl_rewriteviewsinfo_Consrewriteviewsinfo
#define kc_phylum_rewriteviewinfo phylum_rewriteviewinfo
#define kc_tag_rewriteviewinfo_Rewriteviewinfo impl_rewriteviewinfo_Rewriteviewinfo
#define kc_phylum_unparseviewsinfo phylum_unparseviewsinfo
#define kc_tag_unparseviewsinfo_Nilunparseviewsinfo impl_unparseviewsinfo_Nilunparseviewsinfo
#define kc_tag_unparseviewsinfo_Consunparseviewsinfo impl_unparseviewsinfo_Consunparseviewsinfo
#define kc_phylum_unparseviewinfo phylum_unparseviewinfo
#define kc_tag_unparseviewinfo_Unparseviewinfo impl_unparseviewinfo_Unparseviewinfo
#define kc_phylum_unparsedeclsinfo phylum_unparsedeclsinfo
#define kc_tag_unparsedeclsinfo_Nilunparsedeclsinfo impl_unparsedeclsinfo_Nilunparsedeclsinfo
#define kc_tag_unparsedeclsinfo_Consunparsedeclsinfo impl_unparsedeclsinfo_Consunparsedeclsinfo
#define kc_phylum_unparsedeclinfo phylum_unparsedeclinfo
#define kc_tag_unparsedeclinfo_Unparsedeclinfo impl_unparsedeclinfo_Unparsedeclinfo
#define kc_phylum_ac_declaration phylum_ac_declaration
#define kc_tag_ac_declaration_AcDeclaration impl_ac_declaration_AcDeclaration
#define kc_phylum_ac_declaration_list phylum_ac_declaration_list
#define kc_tag_ac_declaration_list_Nilac_declaration_list impl_ac_declaration_list_Nilac_declaration_list
#define kc_tag_ac_declaration_list_Consac_declaration_list impl_ac_declaration_list_Consac_declaration_list
#define kc_phylum_ac_declaration_specifiers phylum_ac_declaration_specifiers
#define kc_tag_ac_declaration_specifiers_Nilac_declaration_specifiers impl_ac_declaration_specifiers_Nilac_declaration_specifiers
#define kc_tag_ac_declaration_specifiers_Consac_declaration_specifiers impl_ac_declaration_specifiers_Consac_declaration_specifiers
#define kc_phylum_ac_declaration_specifier phylum_ac_declaration_specifier
#define kc_tag_ac_declaration_specifier_AcDeclSpecStorageSpec impl_ac_declaration_specifier_AcDeclSpecStorageSpec
#define kc_tag_ac_declaration_specifier_AcDeclSpecTypeSpec impl_ac_declaration_specifier_AcDeclSpecTypeSpec
#define kc_tag_ac_declaration_specifier_AcDeclSpecTypeQual impl_ac_declaration_specifier_AcDeclSpecTypeQual
#define kc_phylum_ac_storage_class_specifier phylum_ac_storage_class_specifier
#define kc_tag_ac_storage_class_specifier_AcAuto impl_ac_storage_class_specifier_AcAuto
#define kc_tag_ac_storage_class_specifier_AcRegister impl_ac_storage_class_specifier_AcRegister
#define kc_tag_ac_storage_class_specifier_AcStatic impl_ac_storage_class_specifier_AcStatic
#define kc_tag_ac_storage_class_specifier_AcExtern impl_ac_storage_class_specifier_AcExtern
#define kc_tag_ac_storage_class_specifier_AcTypedef impl_ac_storage_class_specifier_AcTypedef
#define kc_tag_ac_storage_class_specifier_AcVirtual impl_ac_storage_class_specifier_AcVirtual
#define kc_phylum_ac_type_specifier phylum_ac_type_specifier
#define kc_tag_ac_type_specifier_AcTypeSpec impl_ac_type_specifier_AcTypeSpec
#define kc_phylum_ac_type_qualifier phylum_ac_type_qualifier
#define kc_tag_ac_type_qualifier_AcConst impl_ac_type_qualifier_AcConst
#define kc_tag_ac_type_qualifier_AcVolatile impl_ac_type_qualifier_AcVolatile
#define kc_tag_ac_type_qualifier_AcUnsigned impl_ac_type_qualifier_AcUnsigned
#define kc_tag_ac_type_qualifier_AcNoQualifier impl_ac_type_qualifier_AcNoQualifier
#define kc_phylum_ac_init_declarator_list phylum_ac_init_declarator_list
#define kc_tag_ac_init_declarator_list_Nilac_init_declarator_list impl_ac_init_declarator_list_Nilac_init_declarator_list
#define kc_tag_ac_init_declarator_list_Consac_init_declarator_list impl_ac_init_declarator_list_Consac_init_declarator_list
#define kc_phylum_ac_init_declarator phylum_ac_init_declarator
#define kc_tag_ac_init_declarator_AcInitDecl impl_ac_init_declarator_AcInitDecl
#define kc_phylum_ac_declarator phylum_ac_declarator
#define kc_tag_ac_declarator_AcDeclarator impl_ac_declarator_AcDeclarator
#define kc_phylum_ac_direct_declarator phylum_ac_direct_declarator
#define kc_tag_ac_direct_declarator_AcDirectDeclId impl_ac_direct_declarator_AcDirectDeclId
#define kc_tag_ac_direct_declarator_AcDirectDeclPack impl_ac_direct_declarator_AcDirectDeclPack
#define kc_tag_ac_direct_declarator_AcDirectDeclArray impl_ac_direct_declarator_AcDirectDeclArray
#define kc_tag_ac_direct_declarator_AcDirectDeclProto impl_ac_direct_declarator_AcDirectDeclProto
#define kc_tag_ac_direct_declarator_AcQualifiedDeclProto impl_ac_direct_declarator_AcQualifiedDeclProto
#define kc_tag_ac_direct_declarator_AcMemberDecl impl_ac_direct_declarator_AcMemberDecl
#define kc_tag_ac_direct_declarator_AcConvOperatorDecl impl_ac_direct_declarator_AcConvOperatorDecl
#define kc_tag_ac_direct_declarator_AcOperatorDeclId impl_ac_direct_declarator_AcOperatorDeclId
#define kc_phylum_ac_pointer_option phylum_ac_pointer_option
#define kc_tag_ac_pointer_option_Nopointer impl_ac_pointer_option_Nopointer
#define kc_tag_ac_pointer_option_Yespointer impl_ac_pointer_option_Yespointer
#define kc_phylum_ac_pointer phylum_ac_pointer
#define kc_tag_ac_pointer_AcPointerNil impl_ac_pointer_AcPointerNil
#define kc_tag_ac_pointer_AcPointerCons impl_ac_pointer_AcPointerCons
#define kc_phylum_ac_ref_option phylum_ac_ref_option
#define kc_tag_ac_ref_option_AcNoRef impl_ac_ref_option_AcNoRef
#define kc_tag_ac_ref_option_AcRef impl_ac_ref_option_AcRef
#define kc_phylum_ac_operator_name phylum_ac_operator_name
#define kc_tag_ac_operator_name_AcOperatorName impl_ac_operator_name_AcOperatorName
#define kc_phylum_ac_class_qualifier_help_list phylum_ac_class_qualifier_help_list
#define kc_tag_ac_class_qualifier_help_list_Nilac_class_qualifier_help_list impl_ac_class_qualifier_help_list_Nilac_class_qualifier_help_list
#define kc_tag_ac_class_qualifier_help_list_Consac_class_qualifier_help_list impl_ac_class_qualifier_help_list_Consac_class_qualifier_help_list
#define kc_phylum_ac_class_qualifier_list phylum_ac_class_qualifier_list
#define kc_tag_ac_class_qualifier_list_Nilac_class_qualifier_list impl_ac_class_qualifier_list_Nilac_class_qualifier_list
#define kc_tag_ac_class_qualifier_list_Consac_class_qualifier_list impl_ac_class_qualifier_list_Consac_class_qualifier_list
#define kc_phylum_ac_type_qualifier_list phylum_ac_type_qualifier_list
#define kc_tag_ac_type_qualifier_list_Nilac_type_qualifier_list impl_ac_type_qualifier_list_Nilac_type_qualifier_list
#define kc_tag_ac_type_qualifier_list_Consac_type_qualifier_list impl_ac_type_qualifier_list_Consac_type_qualifier_list
#define kc_phylum_ac_parameter_type_list phylum_ac_parameter_type_list
#define kc_tag_ac_parameter_type_list_AcParList impl_ac_parameter_type_list_AcParList
#define kc_tag_ac_parameter_type_list_AcParList3Dot impl_ac_parameter_type_list_AcParList3Dot
#define kc_phylum_ac_parameter_list phylum_ac_parameter_list
#define kc_tag_ac_parameter_list_Nilac_parameter_list impl_ac_parameter_list_Nilac_parameter_list
#define kc_tag_ac_parameter_list_Consac_parameter_list impl_ac_parameter_list_Consac_parameter_list
#define kc_phylum_ac_parameter_declaration phylum_ac_parameter_declaration
#define kc_tag_ac_parameter_declaration_AcParDeclDecl impl_ac_parameter_declaration_AcParDeclDecl
#define kc_tag_ac_parameter_declaration_AcParDeclAbsdecl impl_ac_parameter_declaration_AcParDeclAbsdecl
#define kc_phylum_ac_identifier_list phylum_ac_identifier_list
#define kc_tag_ac_identifier_list_Nilac_identifier_list impl_ac_identifier_list_Nilac_identifier_list
#define kc_tag_ac_identifier_list_Consac_identifier_list impl_ac_identifier_list_Consac_identifier_list
#define kc_phylum_ac_abstract_declarator phylum_ac_abstract_declarator
#define kc_tag_ac_abstract_declarator_AcAbsdeclPointer impl_ac_abstract_declarator_AcAbsdeclPointer
#define kc_tag_ac_abstract_declarator_AcAbsdeclDirdecl impl_ac_abstract_declarator_AcAbsdeclDirdecl
#define kc_phylum_ac_direct_abstract_declarator_option phylum_ac_direct_abstract_declarator_option
#define kc_tag_ac_direct_abstract_declarator_option_Noac_direct_abstract_declarator impl_ac_direct_abstract_declarator_option_Noac_direct_abstract_declarator
#define kc_tag_ac_direct_abstract_declarator_option_Yesac_direct_abstract_declarator impl_ac_direct_abstract_declarator_option_Yesac_direct_abstract_declarator
#define kc_phylum_ac_direct_abstract_declarator phylum_ac_direct_abstract_declarator
#define kc_tag_ac_direct_abstract_declarator_AcDirAbsdeclPack impl_ac_direct_abstract_declarator_AcDirAbsdeclPack
#define kc_tag_ac_direct_abstract_declarator_AcDirAbsdeclArray impl_ac_direct_abstract_declarator_AcDirAbsdeclArray
#define kc_tag_ac_direct_abstract_declarator_AcDirAbsdeclFn impl_ac_direct_abstract_declarator_AcDirAbsdeclFn
#define kc_phylum_ac_constant_expression_option phylum_ac_constant_expression_option
#define kc_tag_ac_constant_expression_option_Yesac_constant_expression impl_ac_constant_expression_option_Yesac_constant_expression
#define kc_tag_ac_constant_expression_option_Noac_constant_expression impl_ac_constant_expression_option_Noac_constant_expression
#define kc_phylum_ac_constant_expression phylum_ac_constant_expression
#define kc_tag_ac_constant_expression_AcConstExpr impl_ac_constant_expression_AcConstExpr
#define kc_phylum_ac_constant_expression_list phylum_ac_constant_expression_list
#define kc_tag_ac_constant_expression_list_Nilac_constant_expression_list impl_ac_constant_expression_list_Nilac_constant_expression_list
#define kc_tag_ac_constant_expression_list_Consac_constant_expression_list impl_ac_constant_expression_list_Consac_constant_expression_list
#define kc_phylum_ac_opt_base_init_list phylum_ac_opt_base_init_list
#define kc_tag_ac_opt_base_init_list_AcNoBaseInit impl_ac_opt_base_init_list_AcNoBaseInit
#define kc_tag_ac_opt_base_init_list_AcYesBaseInit impl_ac_opt_base_init_list_AcYesBaseInit
#define kc_phylum_ac_base_init_list phylum_ac_base_init_list
#define kc_tag_ac_base_init_list_Nilac_base_init_list impl_ac_base_init_list_Nilac_base_init_list
#define kc_tag_ac_base_init_list_Consac_base_init_list impl_ac_base_init_list_Consac_base_init_list
#define kc_phylum_ac_base_init phylum_ac_base_init
#define kc_tag_ac_base_init_AcBaseInit impl_ac_base_init_AcBaseInit
#define kc_phylum_baseclass_declarations phylum_baseclass_declarations
#define kc_tag_baseclass_declarations_Nilbaseclass_declarations impl_baseclass_declarations_Nilbaseclass_declarations
#define kc_tag_baseclass_declarations_Consbaseclass_declarations impl_baseclass_declarations_Consbaseclass_declarations
#define kc_phylum_baseclass_decl phylum_baseclass_decl
#define kc_tag_baseclass_decl_BaseClassDecl impl_baseclass_decl_BaseClassDecl
#define kc_phylum_baseclass_list phylum_baseclass_list
#define kc_tag_baseclass_list_Nilbaseclass_list impl_baseclass_list_Nilbaseclass_list
#define kc_tag_baseclass_list_Consbaseclass_list impl_baseclass_list_Consbaseclass_list
#define kc_phylum_error phylum_error
#define kc_tag_error_Fatal impl_error_Fatal
#define kc_tag_error_NonFatal impl_error_NonFatal
#define kc_tag_error_Warning impl_error_Warning
#define kc_phylum_problem phylum_problem
#define kc_tag_problem_Problem1 impl_problem_Problem1
#define kc_tag_problem_Problem1ID impl_problem_Problem1ID
#define kc_tag_problem_Problem1tID impl_problem_Problem1tID
#define kc_tag_problem_Problem1we impl_problem_Problem1we
#define kc_tag_problem_Problem1ID1ID impl_problem_Problem1ID1ID
#define kc_tag_problem_Problem1t1ID impl_problem_Problem1t1ID
#define kc_tag_problem_Problem1INT impl_problem_Problem1INT
#define kc_tag_problem_Problem1int1 impl_problem_Problem1int1
#define kc_tag_problem_Problem1INT1ID impl_problem_Problem1INT1ID
#define kc_tag_problem_Problem1ID1ID1ID impl_problem_Problem1ID1ID1ID
#define kc_tag_problem_Problem1INT1ID1ID impl_problem_Problem1INT1ID1ID
#define kc_tag_problem_Problem1storageoption1ID impl_problem_Problem1storageoption1ID
#define kc_tag_problem_Problem2 impl_problem_Problem2
#define kc_tag_problem_Problem3 impl_problem_Problem3
#define kc_tag_problem_Problem3int1 impl_problem_Problem3int1
#define kc_tag_problem_Problem4 impl_problem_Problem4
#define kc_tag_problem_Problem5 impl_problem_Problem5
#define kc_tag_problem_Problem6 impl_problem_Problem6
#define kc_phylum_addedphylumdeclarations phylum_addedphylumdeclarations
#define kc_tag_addedphylumdeclarations_Niladdedphylumdeclarations impl_addedphylumdeclarations_Niladdedphylumdeclarations
#define kc_tag_addedphylumdeclarations_Consaddedphylumdeclarations impl_addedphylumdeclarations_Consaddedphylumdeclarations
#define kc_phylum_addedphylumdeclaration phylum_addedphylumdeclaration
#define kc_tag_addedphylumdeclaration_AddedPhylumdeclaration impl_addedphylumdeclaration_AddedPhylumdeclaration
#define kc_phylum_countedphylumdeclarations phylum_countedphylumdeclarations
#define kc_tag_countedphylumdeclarations_Nilcountedphylumdeclarations impl_countedphylumdeclarations_Nilcountedphylumdeclarations
#define kc_tag_countedphylumdeclarations_Conscountedphylumdeclarations impl_countedphylumdeclarations_Conscountedphylumdeclarations
#define kc_phylum_countedphylumdeclaration phylum_countedphylumdeclaration
#define kc_tag_countedphylumdeclaration_CountedPhylumdeclaration impl_countedphylumdeclaration_CountedPhylumdeclaration
#define kc_phylum_charruns phylum_charruns
#define kc_tag_charruns_Newlines impl_charruns_Newlines
#define kc_tag_charruns_QuotedNewlines impl_charruns_QuotedNewlines
#define kc_tag_charruns_Stars impl_charruns_Stars
#define kc_phylum_bindingidmarks phylum_bindingidmarks
#define kc_tag_bindingidmarks_Nilbindingidmarks impl_bindingidmarks_Nilbindingidmarks
#define kc_tag_bindingidmarks_Consbindingidmarks impl_bindingidmarks_Consbindingidmarks
#define kc_phylum_bindingidmark phylum_bindingidmark
#define kc_tag_bindingidmark_BindingIdMark impl_bindingidmark_BindingIdMark

#endif // KC_DEPRECATED

// Some compilers are too stupid to detect that a function will always return
// a proper value when it returns one in all branches of an if- or switch-
// statement (with final else or default, of course).
#if !defined __GNUC__
# define NORETURN throw 0;
#else
# define NORETURN
#endif

namespace kc {


typedef enum { one_before_first_phylum = 0 ,
    phylum_nocasestring = 1,
    phylum_casestring = 2,
    phylum_real = 3,
    phylum_integer = 4,
    phylum_voidptr = 5,
    phylum_uniqID = 6,
    phylum_ID = 7,
    phylum_INT = 8,
    phylum_STRING = 9,
    phylum_phylumdeclarationsroot = 10,
    phylum_phylumdeclarations = 11,
    phylum_phylumnames = 12,
    phylum_phylumdeclaration = 13,
    phylum_storageoption = 14,
    phylum_storageclasses = 15,
    phylum_productionblock = 16,
    phylum_alternatives = 17,
    phylum_alternative = 18,
    phylum_arguments = 19,
    phylum_argument = 20,
    phylum_Ccode_option = 21,
    phylum_attributes = 22,
    phylum_attribute = 23,
    phylum_attribute_initialisation_option = 24,
    phylum_Cexpression = 25,
    phylum_Cexpression_elem = 26,
    phylum_CexpressionDQ = 27,
    phylum_CexpressionDQ_elem = 28,
    phylum_CexpressionSQ = 29,
    phylum_CexpressionSQ_elem = 30,
    phylum_idCexpressions = 31,
    phylum_idCexpression = 32,
    phylum_Ctexts = 33,
    phylum_includefiles = 34,
    phylum_includefile = 35,
    phylum_includedeclarations = 36,
    phylum_includedeclaration = 37,
    phylum_rwdeclarations = 38,
    phylum_rwdeclaration = 39,
    phylum_rewriteclauses = 40,
    phylum_rewriteclause = 41,
    phylum_patternchains = 42,
    phylum_patternchain = 43,
    phylum_outmostpatterns = 44,
    phylum_patternchainitem = 45,
    phylum_outmostpattern = 46,
    phylum_pattern = 47,
    phylum_patterns = 48,
    phylum_term = 49,
    phylum_terms = 50,
    phylum_fnfiles = 51,
    phylum_fnfile = 52,
    phylum_fndeclarations = 53,
    phylum_fndeclaration = 54,
    phylum_fnclass = 55,
    phylum_Ctext = 56,
    phylum_Ctext_elem = 57,
    phylum_foreach_after = 58,
    phylum_contextinfo = 59,
    phylum_withexpressions = 60,
    phylum_withexpression = 61,
    phylum_withcases = 62,
    phylum_withcase = 63,
    phylum_unparsedeclarations = 64,
    phylum_unparsedeclaration = 65,
    phylum_unparseclauses = 66,
    phylum_unparseclause = 67,
    phylum_viewnames = 68,
    phylum_unparseitems = 69,
    phylum_unparseitem = 70,
    phylum_unpsubterm = 71,
    phylum_unpattributes = 72,
    phylum_viewnameoption = 73,
    phylum_languageoption = 74,
    phylum_languagenames = 75,
    phylum_fileline = 76,
    phylum_scopetypefilelinestack = 77,
    phylum_scopetypefileline = 78,
    phylum_IDtype = 79,
    phylum_operators = 80,
    phylum_phyla = 81,
    phylum_variables = 82,
    phylum_dollarvarstatus = 83,
    phylum_tribool = 84,
    phylum_patternrepresentations = 85,
    phylum_patternrepresentation = 86,
    phylum_elem_patternrepresentation = 87,
    phylum_path = 88,
    phylum_paths = 89,
    phylum_argsnumbers = 90,
    phylum_rewriterulesinfo = 91,
    phylum_rewriteruleinfo = 92,
    phylum_withcasesinfo = 93,
    phylum_withcaseinfo = 94,
    phylum_rewriteviewsinfo = 95,
    phylum_rewriteviewinfo = 96,
    phylum_unparseviewsinfo = 97,
    phylum_unparseviewinfo = 98,
    phylum_unparsedeclsinfo = 99,
    phylum_unparsedeclinfo = 100,
    phylum_ac_declaration = 101,
    phylum_ac_declaration_list = 102,
    phylum_ac_declaration_specifiers = 103,
    phylum_ac_declaration_specifier = 104,
    phylum_ac_storage_class_specifier = 105,
    phylum_ac_type_specifier = 106,
    phylum_ac_type_qualifier = 107,
    phylum_ac_init_declarator_list = 108,
    phylum_ac_init_declarator = 109,
    phylum_ac_declarator = 110,
    phylum_ac_direct_declarator = 111,
    phylum_ac_pointer_option = 112,
    phylum_ac_pointer = 113,
    phylum_ac_ref_option = 114,
    phylum_ac_operator_name = 115,
    phylum_ac_class_qualifier_help_list = 116,
    phylum_ac_class_qualifier_list = 117,
    phylum_ac_type_qualifier_list = 118,
    phylum_ac_parameter_type_list = 119,
    phylum_ac_parameter_list = 120,
    phylum_ac_parameter_declaration = 121,
    phylum_ac_identifier_list = 122,
    phylum_ac_abstract_declarator = 123,
    phylum_ac_direct_abstract_declarator_option = 124,
    phylum_ac_direct_abstract_declarator = 125,
    phylum_ac_constant_expression_option = 126,
    phylum_ac_constant_expression = 127,
    phylum_ac_constant_expression_list = 128,
    phylum_ac_opt_base_init_list = 129,
    phylum_ac_base_init_list = 130,
    phylum_ac_base_init = 131,
    phylum_baseclass_declarations = 132,
    phylum_baseclass_decl = 133,
    phylum_baseclass_list = 134,
    phylum_error = 135,
    phylum_problem = 136,
    phylum_addedphylumdeclarations = 137,
    phylum_addedphylumdeclaration = 138,
    phylum_countedphylumdeclarations = 139,
    phylum_countedphylumdeclaration = 140,
    phylum_charruns = 141,
    phylum_bindingidmarks = 142,
    phylum_bindingidmark = 143,
    last_phylum = 144
} enum_phyla;

typedef enum { one_before_first_operator = 0 ,
    sel_NoCaseStr = 1,
    sel__Str = 2,
    sel__Real = 3,
    sel__Int = 4,
    sel__VoidPtr = 5,
    sel_Str = 6,
    sel_Id = 7,
    sel_Int = 8,
    sel_String = 9,
    sel_PhylumDeclarations = 10,
    sel_Nilphylumdeclarations = 11,
    sel_Consphylumdeclarations = 12,
    sel_Nilphylumnames = 13,
    sel_Consphylumnames = 14,
    sel_PhylumDeclaration = 15,
    sel_NoStorageOption = 16,
    sel_NegativeStorageOption = 17,
    sel_PositiveStorageOption = 18,
    sel_Nilstorageclasses = 19,
    sel_Consstorageclasses = 20,
    sel_Emptyproductionblock = 21,
    sel_ListAlternatives = 22,
    sel_NonlistAlternatives = 23,
    sel_PredefinedAlternatives = 24,
    sel_Nilalternatives = 25,
    sel_Consalternatives = 26,
    sel_Alternative = 27,
    sel_Nilarguments = 28,
    sel_Consarguments = 29,
    sel_Argument = 30,
    sel_CcodeOption = 31,
    sel_Nilattributes = 32,
    sel_Consattributes = 33,
    sel_Attribute = 34,
    sel_Noattribute_initialisation = 35,
    sel_Yesattribute_initialisation = 36,
    sel_NilCexpression = 37,
    sel_ConsCexpression = 38,
    sel_CExpressionPart = 39,
    sel_CExpressionDollarvar = 40,
    sel_CExpressionNl = 41,
    sel_CExpressionDQ = 42,
    sel_CExpressionSQ = 43,
    sel_CExpressionPack = 44,
    sel_CExpressionArray = 45,
    sel_NilCexpressionDQ = 46,
    sel_ConsCexpressionDQ = 47,
    sel_CExpressionDQPart = 48,
    sel_CExpressionDQNl = 49,
    sel_NilCexpressionSQ = 50,
    sel_ConsCexpressionSQ = 51,
    sel_CExpressionSQPart = 52,
    sel_CExpressionSQNl = 53,
    sel_NilidCexpressions = 54,
    sel_ConsidCexpressions = 55,
    sel_IdCexpression = 56,
    sel_NilCtexts = 57,
    sel_ConsCtexts = 58,
    sel_Nilincludefiles = 59,
    sel_Consincludefiles = 60,
    sel_IncludeFile = 61,
    sel_Nilincludedeclarations = 62,
    sel_Consincludedeclarations = 63,
    sel_IncludeDeclaration = 64,
    sel_Nilrwdeclarations = 65,
    sel_Consrwdeclarations = 66,
    sel_RwDeclaration = 67,
    sel_Nilrewriteclauses = 68,
    sel_Consrewriteclauses = 69,
    sel_RewriteClause = 70,
    sel_Nilpatternchains = 71,
    sel_Conspatternchains = 72,
    sel_Nilpatternchain = 73,
    sel_Conspatternchain = 74,
    sel_Niloutmostpatterns = 75,
    sel_Consoutmostpatterns = 76,
    sel_PatternchainitemOutmost = 77,
    sel_PatternchainitemGroup = 78,
    sel_PatternchainitemDollarid = 79,
    sel_OPOperatorWildcard = 80,
    sel_OPOperator = 81,
    sel_OPNonLeafVariable = 82,
    sel_OPWildcard = 83,
    sel_OPDefault = 84,
    sel_PVariable = 85,
    sel_POperator = 86,
    sel_PNonLeafVariable = 87,
    sel_PWildcard = 88,
    sel_PStringLiteral = 89,
    sel_PIntLiteral = 90,
    sel_Nilpatterns = 91,
    sel_Conspatterns = 92,
    sel_TVariable = 93,
    sel_TOperator = 94,
    sel_TMethod = 95,
    sel_TMethodDot = 96,
    sel_TMemberVar = 97,
    sel_TMemberVarDot = 98,
    sel_TCTerm = 99,
    sel_TStringLiteral = 100,
    sel_TIntLiteral = 101,
    sel_Nilterms = 102,
    sel_Consterms = 103,
    sel_Nilfnfiles = 104,
    sel_Consfnfiles = 105,
    sel_FnFile = 106,
    sel_Nilfndeclarations = 107,
    sel_Consfndeclarations = 108,
    sel_FnAcDeclaration = 109,
    sel_AcMemberDeclaration = 110,
    sel_GlobalFn = 111,
    sel_StaticFn = 112,
    sel_MemberFn = 113,
    sel_ConstructorFn = 114,
    sel_DestructorFn = 115,
    sel_ConvOperatorFn = 116,
    sel_NilCtext = 117,
    sel_ConsCtext = 118,
    sel_CTextLine = 119,
    sel_CTextDollarVar = 120,
    sel_CTextNl = 121,
    sel_CTextCexpressionDQ = 122,
    sel_CTextCexpressionSQ = 123,
    sel_CTextCbody = 124,
    sel_CTextForeachexpression = 125,
    sel_CTextWithexpression = 126,
    sel_NoForeachAfter = 127,
    sel_ForeachAfter = 128,
    sel_InForeachContext = 129,
    sel_NotInForeachContext = 130,
    sel_Nilwithexpressions = 131,
    sel_Conswithexpressions = 132,
    sel_WEVariable = 133,
    sel_WECexpression = 134,
    sel_Nilwithcases = 135,
    sel_Conswithcases = 136,
    sel_Withcase = 137,
    sel_Nilunparsedeclarations = 138,
    sel_Consunparsedeclarations = 139,
    sel_UnparseDeclaration = 140,
    sel_Nilunparseclauses = 141,
    sel_Consunparseclauses = 142,
    sel_UnparseClause = 143,
    sel_Nilviewnames = 144,
    sel_Consviewnames = 145,
    sel_Nilunparseitems = 146,
    sel_Consunparseitems = 147,
    sel_UnpStr = 148,
    sel_UnpSubexpr = 149,
    sel_UnpCtext = 150,
    sel_UnpBody = 151,
    sel_UViewVarDecl = 152,
    sel_UnpSubTerm = 153,
    sel_UnpDollarvarTerm = 154,
    sel_UnpSubAttr = 155,
    sel_UnpDollarvarAttr = 156,
    sel_UnpCastedVariable = 157,
    sel_Nilunpattributes = 158,
    sel_Consunpattributes = 159,
    sel_NoViewname = 160,
    sel_YesViewname = 161,
    sel_NoLanguagename = 162,
    sel_LanguageList = 163,
    sel_Nillanguagenames = 164,
    sel_Conslanguagenames = 165,
    sel_FileLine = 166,
    sel_NoFileLine = 167,
    sel_PosNoFileLine = 168,
    sel_Nilscopetypefilelinestack = 169,
    sel_Consscopetypefilelinestack = 170,
    sel_ScopeTypeFileLine = 171,
    sel_ITUnknown = 172,
    sel_ITPredefinedPhylum = 173,
    sel_ITUserPhylum = 174,
    sel_ITPredefinedOperator = 175,
    sel_ITUserOperator = 176,
    sel_ITPredefinedStorageClass = 177,
    sel_ITStorageClass = 178,
    sel_ITPredefinedUView = 179,
    sel_ITUserUView = 180,
    sel_ITUViewVar = 181,
    sel_ITPredefinedRView = 182,
    sel_ITUserRView = 183,
    sel_ITUserFunction = 184,
    sel_ITPatternVariable = 185,
    sel_ITLanguageName = 186,
    sel_Niloperators = 187,
    sel_Consoperators = 188,
    sel_Nilphyla = 189,
    sel_Consphyla = 190,
    sel_Nilvariables = 191,
    sel_Consvariables = 192,
    sel_DVAllowed = 193,
    sel_DVDisallowed = 194,
    sel_Equal = 195,
    sel_Smaller = 196,
    sel_Bigger = 197,
    sel_Nilpatternrepresentations = 198,
    sel_Conspatternrepresentations = 199,
    sel_Nilpatternrepresentation = 200,
    sel_Conspatternrepresentation = 201,
    sel_PRBinding = 202,
    sel_PRVarPredicate = 203,
    sel_PROperPredicate = 204,
    sel_PRUserPredicate = 205,
    sel_PRNonLeafBinding = 206,
    sel_PRWildcard = 207,
    sel_PRDefault = 208,
    sel_PRStringLiteral = 209,
    sel_PRIntLiteral = 210,
    sel_Nilpath = 211,
    sel_Conspath = 212,
    sel_Nilpaths = 213,
    sel_Conspaths = 214,
    sel_Nilargsnumbers = 215,
    sel_Consargsnumbers = 216,
    sel_Nilrewriterulesinfo = 217,
    sel_Consrewriterulesinfo = 218,
    sel_Rewriteruleinfo = 219,
    sel_Nilwithcasesinfo = 220,
    sel_Conswithcasesinfo = 221,
    sel_Withcaseinfo = 222,
    sel_Nilrewriteviewsinfo = 223,
    sel_Consrewriteviewsinfo = 224,
    sel_Rewriteviewinfo = 225,
    sel_Nilunparseviewsinfo = 226,
    sel_Consunparseviewsinfo = 227,
    sel_Unparseviewinfo = 228,
    sel_Nilunparsedeclsinfo = 229,
    sel_Consunparsedeclsinfo = 230,
    sel_Unparsedeclinfo = 231,
    sel_AcDeclaration = 232,
    sel_Nilac_declaration_list = 233,
    sel_Consac_declaration_list = 234,
    sel_Nilac_declaration_specifiers = 235,
    sel_Consac_declaration_specifiers = 236,
    sel_AcDeclSpecStorageSpec = 237,
    sel_AcDeclSpecTypeSpec = 238,
    sel_AcDeclSpecTypeQual = 239,
    sel_AcAuto = 240,
    sel_AcRegister = 241,
    sel_AcStatic = 242,
    sel_AcExtern = 243,
    sel_AcTypedef = 244,
    sel_AcVirtual = 245,
    sel_AcTypeSpec = 246,
    sel_AcConst = 247,
    sel_AcVolatile = 248,
    sel_AcUnsigned = 249,
    sel_AcNoQualifier = 250,
    sel_Nilac_init_declarator_list = 251,
    sel_Consac_init_declarator_list = 252,
    sel_AcInitDecl = 253,
    sel_AcDeclarator = 254,
    sel_AcDirectDeclId = 255,
    sel_AcDirectDeclPack = 256,
    sel_AcDirectDeclArray = 257,
    sel_AcDirectDeclProto = 258,
    sel_AcQualifiedDeclProto = 259,
    sel_AcMemberDecl = 260,
    sel_AcConvOperatorDecl = 261,
    sel_AcOperatorDeclId = 262,
    sel_Nopointer = 263,
    sel_Yespointer = 264,
    sel_AcPointerNil = 265,
    sel_AcPointerCons = 266,
    sel_AcNoRef = 267,
    sel_AcRef = 268,
    sel_AcOperatorName = 269,
    sel_Nilac_class_qualifier_help_list = 270,
    sel_Consac_class_qualifier_help_list = 271,
    sel_Nilac_class_qualifier_list = 272,
    sel_Consac_class_qualifier_list = 273,
    sel_Nilac_type_qualifier_list = 274,
    sel_Consac_type_qualifier_list = 275,
    sel_AcParList = 276,
    sel_AcParList3Dot = 277,
    sel_Nilac_parameter_list = 278,
    sel_Consac_parameter_list = 279,
    sel_AcParDeclDecl = 280,
    sel_AcParDeclAbsdecl = 281,
    sel_Nilac_identifier_list = 282,
    sel_Consac_identifier_list = 283,
    sel_AcAbsdeclPointer = 284,
    sel_AcAbsdeclDirdecl = 285,
    sel_Noac_direct_abstract_declarator = 286,
    sel_Yesac_direct_abstract_declarator = 287,
    sel_AcDirAbsdeclPack = 288,
    sel_AcDirAbsdeclArray = 289,
    sel_AcDirAbsdeclFn = 290,
    sel_Yesac_constant_expression = 291,
    sel_Noac_constant_expression = 292,
    sel_AcConstExpr = 293,
    sel_Nilac_constant_expression_list = 294,
    sel_Consac_constant_expression_list = 295,
    sel_AcNoBaseInit = 296,
    sel_AcYesBaseInit = 297,
    sel_Nilac_base_init_list = 298,
    sel_Consac_base_init_list = 299,
    sel_AcBaseInit = 300,
    sel_Nilbaseclass_declarations = 301,
    sel_Consbaseclass_declarations = 302,
    sel_BaseClassDecl = 303,
    sel_Nilbaseclass_list = 304,
    sel_Consbaseclass_list = 305,
    sel_Fatal = 306,
    sel_NonFatal = 307,
    sel_Warning = 308,
    sel_Problem1 = 309,
    sel_Problem1ID = 310,
    sel_Problem1tID = 311,
    sel_Problem1we = 312,
    sel_Problem1ID1ID = 313,
    sel_Problem1t1ID = 314,
    sel_Problem1INT = 315,
    sel_Problem1int1 = 316,
    sel_Problem1INT1ID = 317,
    sel_Problem1ID1ID1ID = 318,
    sel_Problem1INT1ID1ID = 319,
    sel_Problem1storageoption1ID = 320,
    sel_Problem2 = 321,
    sel_Problem3 = 322,
    sel_Problem3int1 = 323,
    sel_Problem4 = 324,
    sel_Problem5 = 325,
    sel_Problem6 = 326,
    sel_Niladdedphylumdeclarations = 327,
    sel_Consaddedphylumdeclarations = 328,
    sel_AddedPhylumdeclaration = 329,
    sel_Nilcountedphylumdeclarations = 330,
    sel_Conscountedphylumdeclarations = 331,
    sel_CountedPhylumdeclaration = 332,
    sel_Newlines = 333,
    sel_QuotedNewlines = 334,
    sel_Stars = 335,
    sel_Nilbindingidmarks = 336,
    sel_Consbindingidmarks = 337,
    sel_BindingIdMark = 338,
    last_operator = 339
} enum_operators;

class impl_abstract_phylum;
typedef impl_abstract_phylum * abstract_phylum;
typedef const impl_abstract_phylum * c_abstract_phylum;
class impl_abstract_list;
typedef impl_abstract_list * abstract_list;
typedef const impl_abstract_list * c_abstract_list;

template <typename P, typename T>
P phylum_cast(T* t) {
    return static_cast<P>(t);
}
template <typename P, typename T>
const P phylum_cast(const T* t) {
    return static_cast<const P>(t);
}
class impl_nocasestring_NoCaseStr;
class impl_casestring__Str;
class impl_real__Real;
class impl_integer__Int;
class impl_voidptr__VoidPtr;
class impl_uniqID;
class impl_ID;
class impl_INT;
class impl_STRING;
class impl_phylumdeclarationsroot;
class impl_phylumdeclarations;
class impl_phylumnames;
class impl_phylumdeclaration;
class impl_storageoption;
class impl_storageclasses;
class impl_productionblock;
class impl_alternatives;
class impl_alternative;
class impl_arguments;
class impl_argument;
class impl_Ccode_option;
class impl_attributes;
class impl_attribute;
class impl_attribute_initialisation_option;
class impl_Cexpression;
class impl_Cexpression_elem;
class impl_CexpressionDQ;
class impl_CexpressionDQ_elem;
class impl_CexpressionSQ;
class impl_CexpressionSQ_elem;
class impl_idCexpressions;
class impl_idCexpression;
class impl_Ctexts;
class impl_includefiles;
class impl_includefile;
class impl_includedeclarations;
class impl_includedeclaration;
class impl_rwdeclarations;
class impl_rwdeclaration;
class impl_rewriteclauses;
class impl_rewriteclause;
class impl_patternchains;
class impl_patternchain;
class impl_outmostpatterns;
class impl_patternchainitem;
class impl_outmostpattern;
class impl_pattern;
class impl_patterns;
class impl_term;
class impl_terms;
class impl_fnfiles;
class impl_fnfile;
class impl_fndeclarations;
class impl_fndeclaration;
class impl_fnclass;
class impl_Ctext;
class impl_Ctext_elem;
class impl_foreach_after;
class impl_contextinfo;
class impl_withexpressions;
class impl_withexpression;
class impl_withcases;
class impl_withcase;
class impl_unparsedeclarations;
class impl_unparsedeclaration;
class impl_unparseclauses;
class impl_unparseclause;
class impl_viewnames;
class impl_unparseitems;
class impl_unparseitem;
class impl_unpsubterm;
class impl_unpattributes;
class impl_viewnameoption;
class impl_languageoption;
class impl_languagenames;
class impl_fileline;
class impl_scopetypefilelinestack;
class impl_scopetypefileline;
class impl_IDtype;
class impl_operators;
class impl_phyla;
class impl_variables;
class impl_dollarvarstatus;
class impl_tribool;
class impl_patternrepresentations;
class impl_patternrepresentation;
class impl_elem_patternrepresentation;
class impl_path;
class impl_paths;
class impl_argsnumbers;
class impl_rewriterulesinfo;
class impl_rewriteruleinfo;
class impl_withcasesinfo;
class impl_withcaseinfo;
class impl_rewriteviewsinfo;
class impl_rewriteviewinfo;
class impl_unparseviewsinfo;
class impl_unparseviewinfo;
class impl_unparsedeclsinfo;
class impl_unparsedeclinfo;
class impl_ac_declaration;
class impl_ac_declaration_list;
class impl_ac_declaration_specifiers;
class impl_ac_declaration_specifier;
class impl_ac_storage_class_specifier;
class impl_ac_type_specifier;
class impl_ac_type_qualifier;
class impl_ac_init_declarator_list;
class impl_ac_init_declarator;
class impl_ac_declarator;
class impl_ac_direct_declarator;
class impl_ac_pointer_option;
class impl_ac_pointer;
class impl_ac_ref_option;
class impl_ac_operator_name;
class impl_ac_class_qualifier_help_list;
class impl_ac_class_qualifier_list;
class impl_ac_type_qualifier_list;
class impl_ac_parameter_type_list;
class impl_ac_parameter_list;
class impl_ac_parameter_declaration;
class impl_ac_identifier_list;
class impl_ac_abstract_declarator;
class impl_ac_direct_abstract_declarator_option;
class impl_ac_direct_abstract_declarator;
class impl_ac_constant_expression_option;
class impl_ac_constant_expression;
class impl_ac_constant_expression_list;
class impl_ac_opt_base_init_list;
class impl_ac_base_init_list;
class impl_ac_base_init;
class impl_baseclass_declarations;
class impl_baseclass_decl;
class impl_baseclass_list;
class impl_error;
class impl_problem;
class impl_addedphylumdeclarations;
class impl_addedphylumdeclaration;
class impl_countedphylumdeclarations;
class impl_countedphylumdeclaration;
class impl_charruns;
class impl_bindingidmarks;
class impl_bindingidmark;


void kc_invalid_operator( const char *kc_func_prefix, enum_phyla kc_phy, int kc_line,
    const char *kc_file, enum_operators kc_oper ) __attribute__ ((noreturn));

typedef enum_phyla *enum_phyla_list;

/*
 * make sure that the first 'real' storage class _always_ gets a value > 0
 * and kc_not_uniq gets a value == 0
 * (because then we can use it as a C boolean)
 */
enum kc_storageclass_t {
    kc_not_uniq,
    uniq,
    last_storageclass
};

typedef struct {
    const char *name;			// name of the phylum
    enum_operators first_operator;	// index in operator_info[]
    enum_operators last_operator;	// index in operator_info[]
    kc_storageclass_t uniq_stored;	// storage class
} KC_PHYLUM_INFO;

typedef struct {
    const char *name;			// name of the operator
    size_t no_sons;			// number of sons
    bool atomicity;			// atomic type or not
    enum_phyla phylum;			// index in phylum_info[]
    enum_phyla_list subphylum;		// indexes in phylum_info[]
    int no_attrs;			// number of attributes
    enum_phyla_list attribute;		// indexes in phylum_info[]
    size_t size;			// size of operator (for statistics)
} KC_OPERATOR_INFO;

typedef enum_phyla_list KC_UNIQ_INFO;

extern KC_OPERATOR_INFO operator_info[];
extern KC_PHYLUM_INFO phylum_info[];
extern KC_UNIQ_INFO kc_UniqInfo[];

#define KC_OP_NAME(op) (operator_info[op].name)
#define KC_NO_SONS(prod) (operator_info[prod].no_sons)
#define KC_ATOMICITY(prod) (operator_info[prod].atomicity)


typedef impl_nocasestring_NoCaseStr *nocasestring;
typedef const impl_nocasestring_NoCaseStr *c_nocasestring;
typedef impl_casestring__Str *casestring;
typedef const impl_casestring__Str *c_casestring;
typedef impl_real__Real *real;
typedef const impl_real__Real *c_real;
typedef impl_integer__Int *integer;
typedef const impl_integer__Int *c_integer;
typedef impl_voidptr__VoidPtr *voidptr;
typedef const impl_voidptr__VoidPtr *c_voidptr;
typedef impl_uniqID *uniqID;
typedef const impl_uniqID *c_uniqID;
typedef impl_ID *ID;
typedef const impl_ID *c_ID;
typedef impl_INT *INT;
typedef const impl_INT *c_INT;
typedef impl_STRING *STRING;
typedef const impl_STRING *c_STRING;
typedef impl_phylumdeclarationsroot *phylumdeclarationsroot;
typedef const impl_phylumdeclarationsroot *c_phylumdeclarationsroot;
typedef impl_phylumdeclarations *phylumdeclarations;
typedef const impl_phylumdeclarations *c_phylumdeclarations;
typedef impl_phylumnames *phylumnames;
typedef const impl_phylumnames *c_phylumnames;
typedef impl_phylumdeclaration *phylumdeclaration;
typedef const impl_phylumdeclaration *c_phylumdeclaration;
typedef impl_storageoption *storageoption;
typedef const impl_storageoption *c_storageoption;
typedef impl_storageclasses *storageclasses;
typedef const impl_storageclasses *c_storageclasses;
typedef impl_productionblock *productionblock;
typedef const impl_productionblock *c_productionblock;
typedef impl_alternatives *alternatives;
typedef const impl_alternatives *c_alternatives;
typedef impl_alternative *alternative;
typedef const impl_alternative *c_alternative;
typedef impl_arguments *arguments;
typedef const impl_arguments *c_arguments;
typedef impl_argument *argument;
typedef const impl_argument *c_argument;
typedef impl_Ccode_option *Ccode_option;
typedef const impl_Ccode_option *c_Ccode_option;
typedef impl_attributes *attributes;
typedef const impl_attributes *c_attributes;
typedef impl_attribute *attribute;
typedef const impl_attribute *c_attribute;
typedef impl_attribute_initialisation_option *attribute_initialisation_option;
typedef const impl_attribute_initialisation_option *c_attribute_initialisation_option;
typedef impl_Cexpression *Cexpression;
typedef const impl_Cexpression *c_Cexpression;
typedef impl_Cexpression_elem *Cexpression_elem;
typedef const impl_Cexpression_elem *c_Cexpression_elem;
typedef impl_CexpressionDQ *CexpressionDQ;
typedef const impl_CexpressionDQ *c_CexpressionDQ;
typedef impl_CexpressionDQ_elem *CexpressionDQ_elem;
typedef const impl_CexpressionDQ_elem *c_CexpressionDQ_elem;
typedef impl_CexpressionSQ *CexpressionSQ;
typedef const impl_CexpressionSQ *c_CexpressionSQ;
typedef impl_CexpressionSQ_elem *CexpressionSQ_elem;
typedef const impl_CexpressionSQ_elem *c_CexpressionSQ_elem;
typedef impl_idCexpressions *idCexpressions;
typedef const impl_idCexpressions *c_idCexpressions;
typedef impl_idCexpression *idCexpression;
typedef const impl_idCexpression *c_idCexpression;
typedef impl_Ctexts *Ctexts;
typedef const impl_Ctexts *c_Ctexts;
typedef impl_includefiles *includefiles;
typedef const impl_includefiles *c_includefiles;
typedef impl_includefile *includefile;
typedef const impl_includefile *c_includefile;
typedef impl_includedeclarations *includedeclarations;
typedef const impl_includedeclarations *c_includedeclarations;
typedef impl_includedeclaration *includedeclaration;
typedef const impl_includedeclaration *c_includedeclaration;
typedef impl_rwdeclarations *rwdeclarations;
typedef const impl_rwdeclarations *c_rwdeclarations;
typedef impl_rwdeclaration *rwdeclaration;
typedef const impl_rwdeclaration *c_rwdeclaration;
typedef impl_rewriteclauses *rewriteclauses;
typedef const impl_rewriteclauses *c_rewriteclauses;
typedef impl_rewriteclause *rewriteclause;
typedef const impl_rewriteclause *c_rewriteclause;
typedef impl_patternchains *patternchains;
typedef const impl_patternchains *c_patternchains;
typedef impl_patternchain *patternchain;
typedef const impl_patternchain *c_patternchain;
typedef impl_outmostpatterns *outmostpatterns;
typedef const impl_outmostpatterns *c_outmostpatterns;
typedef impl_patternchainitem *patternchainitem;
typedef const impl_patternchainitem *c_patternchainitem;
typedef impl_outmostpattern *outmostpattern;
typedef const impl_outmostpattern *c_outmostpattern;
typedef impl_pattern *pattern;
typedef const impl_pattern *c_pattern;
typedef impl_patterns *patterns;
typedef const impl_patterns *c_patterns;
typedef impl_term *term;
typedef const impl_term *c_term;
typedef impl_terms *terms;
typedef const impl_terms *c_terms;
typedef impl_fnfiles *fnfiles;
typedef const impl_fnfiles *c_fnfiles;
typedef impl_fnfile *fnfile;
typedef const impl_fnfile *c_fnfile;
typedef impl_fndeclarations *fndeclarations;
typedef const impl_fndeclarations *c_fndeclarations;
typedef impl_fndeclaration *fndeclaration;
typedef const impl_fndeclaration *c_fndeclaration;
typedef impl_fnclass *fnclass;
typedef const impl_fnclass *c_fnclass;
typedef impl_Ctext *Ctext;
typedef const impl_Ctext *c_Ctext;
typedef impl_Ctext_elem *Ctext_elem;
typedef const impl_Ctext_elem *c_Ctext_elem;
typedef impl_foreach_after *foreach_after;
typedef const impl_foreach_after *c_foreach_after;
typedef impl_contextinfo *contextinfo;
typedef const impl_contextinfo *c_contextinfo;
typedef impl_withexpressions *withexpressions;
typedef const impl_withexpressions *c_withexpressions;
typedef impl_withexpression *withexpression;
typedef const impl_withexpression *c_withexpression;
typedef impl_withcases *withcases;
typedef const impl_withcases *c_withcases;
typedef impl_withcase *withcase;
typedef const impl_withcase *c_withcase;
typedef impl_unparsedeclarations *unparsedeclarations;
typedef const impl_unparsedeclarations *c_unparsedeclarations;
typedef impl_unparsedeclaration *unparsedeclaration;
typedef const impl_unparsedeclaration *c_unparsedeclaration;
typedef impl_unparseclauses *unparseclauses;
typedef const impl_unparseclauses *c_unparseclauses;
typedef impl_unparseclause *unparseclause;
typedef const impl_unparseclause *c_unparseclause;
typedef impl_viewnames *viewnames;
typedef const impl_viewnames *c_viewnames;
typedef impl_unparseitems *unparseitems;
typedef const impl_unparseitems *c_unparseitems;
typedef impl_unparseitem *unparseitem;
typedef const impl_unparseitem *c_unparseitem;
typedef impl_unpsubterm *unpsubterm;
typedef const impl_unpsubterm *c_unpsubterm;
typedef impl_unpattributes *unpattributes;
typedef const impl_unpattributes *c_unpattributes;
typedef impl_viewnameoption *viewnameoption;
typedef const impl_viewnameoption *c_viewnameoption;
typedef impl_languageoption *languageoption;
typedef const impl_languageoption *c_languageoption;
typedef impl_languagenames *languagenames;
typedef const impl_languagenames *c_languagenames;
typedef impl_fileline *fileline;
typedef const impl_fileline *c_fileline;
typedef impl_scopetypefilelinestack *scopetypefilelinestack;
typedef const impl_scopetypefilelinestack *c_scopetypefilelinestack;
typedef impl_scopetypefileline *scopetypefileline;
typedef const impl_scopetypefileline *c_scopetypefileline;
typedef impl_IDtype *IDtype;
typedef const impl_IDtype *c_IDtype;
typedef impl_operators *operators;
typedef const impl_operators *c_operators;
typedef impl_phyla *phyla;
typedef const impl_phyla *c_phyla;
typedef impl_variables *variables;
typedef const impl_variables *c_variables;
typedef impl_dollarvarstatus *dollarvarstatus;
typedef const impl_dollarvarstatus *c_dollarvarstatus;
typedef impl_tribool *tribool;
typedef const impl_tribool *c_tribool;
typedef impl_patternrepresentations *patternrepresentations;
typedef const impl_patternrepresentations *c_patternrepresentations;
typedef impl_patternrepresentation *patternrepresentation;
typedef const impl_patternrepresentation *c_patternrepresentation;
typedef impl_elem_patternrepresentation *elem_patternrepresentation;
typedef const impl_elem_patternrepresentation *c_elem_patternrepresentation;
typedef impl_path *path;
typedef const impl_path *c_path;
typedef impl_paths *paths;
typedef const impl_paths *c_paths;
typedef impl_argsnumbers *argsnumbers;
typedef const impl_argsnumbers *c_argsnumbers;
typedef impl_rewriterulesinfo *rewriterulesinfo;
typedef const impl_rewriterulesinfo *c_rewriterulesinfo;
typedef impl_rewriteruleinfo *rewriteruleinfo;
typedef const impl_rewriteruleinfo *c_rewriteruleinfo;
typedef impl_withcasesinfo *withcasesinfo;
typedef const impl_withcasesinfo *c_withcasesinfo;
typedef impl_withcaseinfo *withcaseinfo;
typedef const impl_withcaseinfo *c_withcaseinfo;
typedef impl_rewriteviewsinfo *rewriteviewsinfo;
typedef const impl_rewriteviewsinfo *c_rewriteviewsinfo;
typedef impl_rewriteviewinfo *rewriteviewinfo;
typedef const impl_rewriteviewinfo *c_rewriteviewinfo;
typedef impl_unparseviewsinfo *unparseviewsinfo;
typedef const impl_unparseviewsinfo *c_unparseviewsinfo;
typedef impl_unparseviewinfo *unparseviewinfo;
typedef const impl_unparseviewinfo *c_unparseviewinfo;
typedef impl_unparsedeclsinfo *unparsedeclsinfo;
typedef const impl_unparsedeclsinfo *c_unparsedeclsinfo;
typedef impl_unparsedeclinfo *unparsedeclinfo;
typedef const impl_unparsedeclinfo *c_unparsedeclinfo;
typedef impl_ac_declaration *ac_declaration;
typedef const impl_ac_declaration *c_ac_declaration;
typedef impl_ac_declaration_list *ac_declaration_list;
typedef const impl_ac_declaration_list *c_ac_declaration_list;
typedef impl_ac_declaration_specifiers *ac_declaration_specifiers;
typedef const impl_ac_declaration_specifiers *c_ac_declaration_specifiers;
typedef impl_ac_declaration_specifier *ac_declaration_specifier;
typedef const impl_ac_declaration_specifier *c_ac_declaration_specifier;
typedef impl_ac_storage_class_specifier *ac_storage_class_specifier;
typedef const impl_ac_storage_class_specifier *c_ac_storage_class_specifier;
typedef impl_ac_type_specifier *ac_type_specifier;
typedef const impl_ac_type_specifier *c_ac_type_specifier;
typedef impl_ac_type_qualifier *ac_type_qualifier;
typedef const impl_ac_type_qualifier *c_ac_type_qualifier;
typedef impl_ac_init_declarator_list *ac_init_declarator_list;
typedef const impl_ac_init_declarator_list *c_ac_init_declarator_list;
typedef impl_ac_init_declarator *ac_init_declarator;
typedef const impl_ac_init_declarator *c_ac_init_declarator;
typedef impl_ac_declarator *ac_declarator;
typedef const impl_ac_declarator *c_ac_declarator;
typedef impl_ac_direct_declarator *ac_direct_declarator;
typedef const impl_ac_direct_declarator *c_ac_direct_declarator;
typedef impl_ac_pointer_option *ac_pointer_option;
typedef const impl_ac_pointer_option *c_ac_pointer_option;
typedef impl_ac_pointer *ac_pointer;
typedef const impl_ac_pointer *c_ac_pointer;
typedef impl_ac_ref_option *ac_ref_option;
typedef const impl_ac_ref_option *c_ac_ref_option;
typedef impl_ac_operator_name *ac_operator_name;
typedef const impl_ac_operator_name *c_ac_operator_name;
typedef impl_ac_class_qualifier_help_list *ac_class_qualifier_help_list;
typedef const impl_ac_class_qualifier_help_list *c_ac_class_qualifier_help_list;
typedef impl_ac_class_qualifier_list *ac_class_qualifier_list;
typedef const impl_ac_class_qualifier_list *c_ac_class_qualifier_list;
typedef impl_ac_type_qualifier_list *ac_type_qualifier_list;
typedef const impl_ac_type_qualifier_list *c_ac_type_qualifier_list;
typedef impl_ac_parameter_type_list *ac_parameter_type_list;
typedef const impl_ac_parameter_type_list *c_ac_parameter_type_list;
typedef impl_ac_parameter_list *ac_parameter_list;
typedef const impl_ac_parameter_list *c_ac_parameter_list;
typedef impl_ac_parameter_declaration *ac_parameter_declaration;
typedef const impl_ac_parameter_declaration *c_ac_parameter_declaration;
typedef impl_ac_identifier_list *ac_identifier_list;
typedef const impl_ac_identifier_list *c_ac_identifier_list;
typedef impl_ac_abstract_declarator *ac_abstract_declarator;
typedef const impl_ac_abstract_declarator *c_ac_abstract_declarator;
typedef impl_ac_direct_abstract_declarator_option *ac_direct_abstract_declarator_option;
typedef const impl_ac_direct_abstract_declarator_option *c_ac_direct_abstract_declarator_option;
typedef impl_ac_direct_abstract_declarator *ac_direct_abstract_declarator;
typedef const impl_ac_direct_abstract_declarator *c_ac_direct_abstract_declarator;
typedef impl_ac_constant_expression_option *ac_constant_expression_option;
typedef const impl_ac_constant_expression_option *c_ac_constant_expression_option;
typedef impl_ac_constant_expression *ac_constant_expression;
typedef const impl_ac_constant_expression *c_ac_constant_expression;
typedef impl_ac_constant_expression_list *ac_constant_expression_list;
typedef const impl_ac_constant_expression_list *c_ac_constant_expression_list;
typedef impl_ac_opt_base_init_list *ac_opt_base_init_list;
typedef const impl_ac_opt_base_init_list *c_ac_opt_base_init_list;
typedef impl_ac_base_init_list *ac_base_init_list;
typedef const impl_ac_base_init_list *c_ac_base_init_list;
typedef impl_ac_base_init *ac_base_init;
typedef const impl_ac_base_init *c_ac_base_init;
typedef impl_baseclass_declarations *baseclass_declarations;
typedef const impl_baseclass_declarations *c_baseclass_declarations;
typedef impl_baseclass_decl *baseclass_decl;
typedef const impl_baseclass_decl *c_baseclass_decl;
typedef impl_baseclass_list *baseclass_list;
typedef const impl_baseclass_list *c_baseclass_list;
typedef impl_error *error;
typedef const impl_error *c_error;
typedef impl_problem *problem;
typedef const impl_problem *c_problem;
typedef impl_addedphylumdeclarations *addedphylumdeclarations;
typedef const impl_addedphylumdeclarations *c_addedphylumdeclarations;
typedef impl_addedphylumdeclaration *addedphylumdeclaration;
typedef const impl_addedphylumdeclaration *c_addedphylumdeclaration;
typedef impl_countedphylumdeclarations *countedphylumdeclarations;
typedef const impl_countedphylumdeclarations *c_countedphylumdeclarations;
typedef impl_countedphylumdeclaration *countedphylumdeclaration;
typedef const impl_countedphylumdeclaration *c_countedphylumdeclaration;
typedef impl_charruns *charruns;
typedef const impl_charruns *c_charruns;
typedef impl_bindingidmarks *bindingidmarks;
typedef const impl_bindingidmarks *c_bindingidmarks;
typedef impl_bindingidmark *bindingidmark;
typedef const impl_bindingidmark *c_bindingidmark;

#define KC_NO_OF_OPERATORS 339


} // namespace kc
namespace kc { }
using namespace kc;
/* included stuff */
typedef enum {include_header =0, include_file =1, include_unknown, include_both} include_type;
class twoIncludedeclarations {
    includedeclarations inc1, inc2;
    public:
    includedeclarations& operator[](int i)
    { return (i==0) ? inc1 : inc2; }
};

//
// The Termprocessor Kimwitu++
//
// Copyright (C) 1991 University of Twente, Dept TIOS.
// Copyright (C) 1998-2003 Humboldt-University of Berlin, Institute of Informatics
// All rights reserved.
//
// Kimwitu++ is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Kimwitu++ is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Kimwitu++; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//

#include "config.h"

extern char kimwitu_copyright[] ; // defined above
extern casestring g_progname;
extern char* pg_line;
struct cmdline_options {
    std::string hfilename;
    std::string ccfilename;
    bool quiet;
    bool verbose;
    bool no_csgio;
    bool no_unparse;
    bool no_rewrite;
    bool no_printdot;
    bool no_hashtables;
    bool operator_cast;
    bool smart_pointer;
    bool weak_pointer;
    char covariant;
    std::string for_bison;
    bool for_yxx;
    bool overwrite;
    bool linedirec;
    bool rw_loop;
    std::string stdafx;
    std::string dllexports;
    std::string prefix;
    std::string suffix;
    std::string filter;
    std::string msg_format;
    std::string dir_line;
    bool warn_drop_identical_patterns; // actually dropped from generated code (old test)
    bool warn_equivalent_patterns; // informational only (new test)
    bool warn_overlapping_patterns;
    cmdline_options(): hfilename(""), ccfilename(""),
    quiet(false), verbose(false), no_csgio(false), no_unparse(false), no_rewrite(false),
    no_printdot(false), no_hashtables(false), operator_cast(false), smart_pointer(false),
    weak_pointer(false), covariant('y'), for_bison(""), for_yxx(false), overwrite(false),
    linedirec(true), rw_loop(false), stdafx(""), dllexports(""), prefix(""), suffix("cc"),
    filter(""), msg_format(""), dir_line(""),
    warn_drop_identical_patterns(true),
    warn_equivalent_patterns(true),
    warn_overlapping_patterns(false) { }
};
extern cmdline_options g_options;

#define INC_HEADER		"HEADER"
#define INC_CODE		"CODE"
#define INC_KC_TYPES_HEADER	"KC_TYPES_HEADER"
#define INC_KC_TYPES		"KC_TYPES"
#define INC_KC_REWRITE_HEADER	"KC_REWRITE_HEADER"
#define INC_KC_REWRITE		"KC_REWRITE"
#define INC_KC_CSGIO_HEADER	"KC_CSGIO_HEADER"
#define INC_KC_CSGIO		"KC_CSGIO"
#define INC_KC_UNPARSE_HEADER	"KC_UNPARSE_HEADER"
#define INC_KC_UNPARSE		"KC_UNPARSE"
#define INC_KC_FUNCTIONS_HEADER	"KC_FUNCTIONS_%s_HEADER"
#define INC_KC_FUNCTIONS	"KC_FUNCTIONS_%s"


namespace kc { void leave(int); }

extern int pg_lineno;					/* global line # */
extern int pg_column;					/* global column # */
extern int pg_charpos;					/* global charpos # */
extern casestring pg_filename;				/* global file name */
extern int pg_no_of_arguments;				/* no_of_arguments */
extern phylumdeclarations Thephylumdeclarations;	/* global phylumdecls */
extern rwdeclarations Therwdeclarations;		/* global rw-decls */
extern fndeclarations Thefndeclarations;		/* fn-decls for the file being parsed */
extern fnfiles Thefnfiles;				/* global fn-decls */
extern includefiles Theincludefiles;			/* global incl-decls */
extern unparsedeclarations Theunparsedeclarations;	/* global unp-decls */
extern argsnumbers Theargsnumbers;			/* global list of argsnumbers */
extern viewnames Theuviewnames;				/* global list of u-viewnames */
extern viewnames Therviewnames;				/* global list of r-viewnames */
extern storageclasses Thestorageclasses;		/* global list of storageclasses */
extern languagenames Thelanguages;			/* global list of used languages */
extern baseclass_declarations Thebaseclasses;		/* global list of defined baseclasses */
extern bool pg_uviewshavebeendefined;			/* global indication */
extern bool pg_rviewshavebeendefined;			/* global indication */
extern bool pg_storageclasseshavebeendefined;		/* global indication */
extern bool pg_languageshavebeendefined;		/* global indication */

#include "error.h"

extern viewnameoption ug_viewnameopt;

#include "occur.h"

extern addedphylumdeclarations pl_addedphylumdeclarations;

extern countedphylumdeclarations pl_countedphylumdeclarations;

namespace kc { ID f_emptyId(); }

namespace kc { void collect_strings(void); }

namespace kc { void unparse_string_collection(void); }

extern bindingidmarks Thebindingidmarks;

/* end included stuff */


namespace kc {

#ifndef KC_NO_DEFAULT_IN_WITH
# define KC_NO_DEFAULT_IN_WITH "Internal Error: no default action defined in function %s at %s:%d\n"
#endif
void kc_no_default_in_with (const char*, int, const char*);
void kc_returnless_function (const char *, int, const char*);

#ifndef NDEBUG
# define assertCond(t) do {if (!(t)) kc_assertionFailed(__FILE__,__LINE__);}while(false)
# define assertReason(t,s) do {if (!(t)) kc_assertionReasonFailed(__FILE__,__LINE__,s);}while(false)
# define assertNonNull(p) do {if (p == 0) kc_assertionNonNullFailed(__FILE__,__LINE__,#p);}while(false)
# define assertPhylum(ptr,phy) do { \
    assertNonNull(ptr); \
    if (ptr->phylum()!=phy) \
	kc_assertionOperatorInPhylumFailed(ptr->prod_sel(),#ptr,"->prod_sel()","phy",__FILE__,__LINE__); \
} while(false)
#else
# define assertCond(t)
# define assertReason(t,s)
# define assertNonNull(ptr)
# define assertPhylum(op,phy)
#endif
#define assertionFailed(s) kc_assertionReasonFailed(__FILE__,__LINE__,s)

void kc_assertionFailed (const char*, int) __attribute__ ((noreturn));
void kc_assertionReasonFailed (const char*, int, const char*) __attribute__ ((noreturn));
void kc_assertionNonNullFailed (const char*, int, const char*) __attribute__ ((noreturn));
void kc_assertionOperatorInPhylumFailed (int, const char*, const char*, const char*, const char*, int) __attribute__ ((noreturn));

casestring mkcasestring( const kc_char *, int length = -1);
nocasestring mknocasestring( const kc_char *, int length = -1);
integer mkinteger( const INTEGER );
real mkreal( const REAL );
inline casestring _Str( const kc_char * cc) { return mkcasestring(cc); }
inline nocasestring NoCaseStr( const kc_char * cc) { return mknocasestring(cc); }
inline integer _Int( const INTEGER cc) { return mkinteger(cc); }
inline real _Real( const REAL cc) { return mkreal(cc); }
class impl_uniqID_Str* Str (casestring);
class impl_ID_Id* Id (uniqID);
class impl_INT_Int* Int (integer);
class impl_STRING_String* String (casestring);
class impl_phylumdeclarationsroot_PhylumDeclarations* PhylumDeclarations (phylumdeclarations);
phylumdeclarations Nilphylumdeclarations();
phylumdeclarations Consphylumdeclarations(phylumdeclaration,phylumdeclarations);
phylumnames Nilphylumnames();
phylumnames Consphylumnames(ID,phylumnames);
class impl_phylumdeclaration_PhylumDeclaration* PhylumDeclaration (ID, storageoption, productionblock, Ccode_option);
class impl_storageoption_NoStorageOption* NoStorageOption ();
class impl_storageoption_NegativeStorageOption* NegativeStorageOption (ID);
class impl_storageoption_PositiveStorageOption* PositiveStorageOption (ID);
storageclasses Nilstorageclasses();
storageclasses Consstorageclasses(ID,storageclasses);
class impl_productionblock_Emptyproductionblock* Emptyproductionblock ();
class impl_productionblock_ListAlternatives* ListAlternatives (alternatives, ID);
class impl_productionblock_NonlistAlternatives* NonlistAlternatives (alternatives);
class impl_productionblock_PredefinedAlternatives* PredefinedAlternatives (alternatives);
alternatives Nilalternatives();
alternatives Consalternatives(alternative,alternatives);
class impl_alternative_Alternative* Alternative (ID, arguments);
arguments Nilarguments();
arguments Consarguments(ID,arguments);
class impl_argument_Argument* Argument (ID, integer);
class impl_Ccode_option_CcodeOption* CcodeOption (attributes, Ctexts);
attributes Nilattributes();
attributes Consattributes(attribute,attributes);
class impl_attribute_Attribute* Attribute (ID, ID, attribute_initialisation_option);
class impl_attribute_initialisation_option_Noattribute_initialisation* Noattribute_initialisation ();
class impl_attribute_initialisation_option_Yesattribute_initialisation* Yesattribute_initialisation (Cexpression);
Cexpression NilCexpression();
Cexpression ConsCexpression(Cexpression_elem,Cexpression);
class impl_Cexpression_elem_CExpressionPart* CExpressionPart (casestring);
class impl_Cexpression_elem_CExpressionDollarvar* CExpressionDollarvar (INT);
class impl_Cexpression_elem_CExpressionNl* CExpressionNl ();
class impl_Cexpression_elem_CExpressionDQ* CExpressionDQ (CexpressionDQ);
class impl_Cexpression_elem_CExpressionSQ* CExpressionSQ (CexpressionSQ);
class impl_Cexpression_elem_CExpressionPack* CExpressionPack (Cexpression);
class impl_Cexpression_elem_CExpressionArray* CExpressionArray (Cexpression);
CexpressionDQ NilCexpressionDQ();
CexpressionDQ ConsCexpressionDQ(CexpressionDQ_elem,CexpressionDQ);
class impl_CexpressionDQ_elem_CExpressionDQPart* CExpressionDQPart (casestring);
class impl_CexpressionDQ_elem_CExpressionDQNl* CExpressionDQNl ();
CexpressionSQ NilCexpressionSQ();
CexpressionSQ ConsCexpressionSQ(CexpressionSQ_elem,CexpressionSQ);
class impl_CexpressionSQ_elem_CExpressionSQPart* CExpressionSQPart (casestring);
class impl_CexpressionSQ_elem_CExpressionSQNl* CExpressionSQNl ();
idCexpressions NilidCexpressions();
idCexpressions ConsidCexpressions(idCexpression,idCexpressions);
class impl_idCexpression_IdCexpression* IdCexpression (ID, Cexpression);
Ctexts NilCtexts();
Ctexts ConsCtexts(Ctext,Ctexts);
includefiles Nilincludefiles();
includefiles Consincludefiles(includefile,includefiles);
class impl_includefile_IncludeFile* IncludeFile (casestring);
includedeclarations Nilincludedeclarations();
includedeclarations Consincludedeclarations(includedeclaration,includedeclarations);
class impl_includedeclaration_IncludeDeclaration* IncludeDeclaration (casestring);
rwdeclarations Nilrwdeclarations();
rwdeclarations Consrwdeclarations(rwdeclaration,rwdeclarations);
class impl_rwdeclaration_RwDeclaration* RwDeclaration (outmostpatterns, rewriteclauses);
rewriteclauses Nilrewriteclauses();
rewriteclauses Consrewriteclauses(rewriteclause,rewriteclauses);
class impl_rewriteclause_RewriteClause* RewriteClause (viewnames, term);
patternchains Nilpatternchains();
patternchains Conspatternchains(patternchain,patternchains);
patternchain Nilpatternchain();
patternchain Conspatternchain(patternchainitem,patternchain);
outmostpatterns Niloutmostpatterns();
outmostpatterns Consoutmostpatterns(outmostpattern,outmostpatterns);
class impl_patternchainitem_PatternchainitemOutmost* PatternchainitemOutmost (outmostpattern);
class impl_patternchainitem_PatternchainitemGroup* PatternchainitemGroup (patternchains);
class impl_patternchainitem_PatternchainitemDollarid* PatternchainitemDollarid (ID);
class impl_outmostpattern_OPOperatorWildcard* OPOperatorWildcard (ID, Cexpression);
class impl_outmostpattern_OPOperator* OPOperator (ID, patterns, Cexpression);
class impl_outmostpattern_OPNonLeafVariable* OPNonLeafVariable (ID, outmostpattern);
class impl_outmostpattern_OPWildcard* OPWildcard (Cexpression);
class impl_outmostpattern_OPDefault* OPDefault (Cexpression);
class impl_pattern_PVariable* PVariable (ID);
class impl_pattern_POperator* POperator (ID, patterns);
class impl_pattern_PNonLeafVariable* PNonLeafVariable (ID, pattern);
class impl_pattern_PWildcard* PWildcard ();
class impl_pattern_PStringLiteral* PStringLiteral (CexpressionDQ);
class impl_pattern_PIntLiteral* PIntLiteral (INT);
patterns Nilpatterns();
patterns Conspatterns(pattern,patterns);
class impl_term_TVariable* TVariable (ID);
class impl_term_TOperator* TOperator (ID, terms);
class impl_term_TMethod* TMethod (term, ID, terms);
class impl_term_TMethodDot* TMethodDot (term, ID, terms);
class impl_term_TMemberVar* TMemberVar (term, ID);
class impl_term_TMemberVarDot* TMemberVarDot (term, ID);
class impl_term_TCTerm* TCTerm (CexpressionSQ);
class impl_term_TStringLiteral* TStringLiteral (CexpressionDQ);
class impl_term_TIntLiteral* TIntLiteral (INT);
terms Nilterms();
terms Consterms(term,terms);
fnfiles Nilfnfiles();
fnfiles Consfnfiles(fnfile,fnfiles);
class impl_fnfile_FnFile* FnFile (casestring);
fndeclarations Nilfndeclarations();
fndeclarations Consfndeclarations(fndeclaration,fndeclarations);
class impl_fndeclaration_FnAcDeclaration* FnAcDeclaration (ac_declaration_specifiers, ac_declarator, ac_declaration_list, ac_opt_base_init_list, Ctext, ID, fnclass);
class impl_fndeclaration_AcMemberDeclaration* AcMemberDeclaration (ac_declaration_specifiers, ac_declarator, ac_constant_expression_option, fnclass);
class impl_fnclass_GlobalFn* GlobalFn ();
class impl_fnclass_StaticFn* StaticFn (casestring);
class impl_fnclass_MemberFn* MemberFn ();
class impl_fnclass_ConstructorFn* ConstructorFn ();
class impl_fnclass_DestructorFn* DestructorFn ();
class impl_fnclass_ConvOperatorFn* ConvOperatorFn ();
Ctext NilCtext();
Ctext ConsCtext(Ctext_elem,Ctext);
class impl_Ctext_elem_CTextLine* CTextLine (casestring);
class impl_Ctext_elem_CTextDollarVar* CTextDollarVar (INT);
class impl_Ctext_elem_CTextNl* CTextNl (integer);
class impl_Ctext_elem_CTextCexpressionDQ* CTextCexpressionDQ (CexpressionDQ);
class impl_Ctext_elem_CTextCexpressionSQ* CTextCexpressionSQ (CexpressionSQ);
class impl_Ctext_elem_CTextCbody* CTextCbody (Ctext);
class impl_Ctext_elem_CTextForeachexpression* CTextForeachexpression (patternchain, idCexpressions, withexpressions, Ctext, foreach_after);
class impl_Ctext_elem_CTextWithexpression* CTextWithexpression (withexpressions, withcases, contextinfo);
class impl_foreach_after_NoForeachAfter* NoForeachAfter ();
class impl_foreach_after_ForeachAfter* ForeachAfter (patternchain, idCexpressions, withexpressions, Ctext);
class impl_contextinfo_InForeachContext* InForeachContext (patternchain);
class impl_contextinfo_NotInForeachContext* NotInForeachContext ();
withexpressions Nilwithexpressions();
withexpressions Conswithexpressions(withexpression,withexpressions);
class impl_withexpression_WEVariable* WEVariable (ID);
class impl_withexpression_WECexpression* WECexpression (Cexpression);
withcases Nilwithcases();
withcases Conswithcases(withcase,withcases);
class impl_withcase_Withcase* Withcase (patternchains, Ctext);
unparsedeclarations Nilunparsedeclarations();
unparsedeclarations Consunparsedeclarations(unparsedeclaration,unparsedeclarations);
class impl_unparsedeclaration_UnparseDeclaration* UnparseDeclaration (outmostpatterns, unparseclauses);
unparseclauses Nilunparseclauses();
unparseclauses Consunparseclauses(unparseclause,unparseclauses);
class impl_unparseclause_UnparseClause* UnparseClause (viewnames, unparseitems);
viewnames Nilviewnames();
viewnames Consviewnames(ID,viewnames);
unparseitems Nilunparseitems();
unparseitems Consunparseitems(unparseitem,unparseitems);
class impl_unparseitem_UnpStr* UnpStr (languageoption, CexpressionDQ, viewnameoption);
class impl_unparseitem_UnpSubexpr* UnpSubexpr (languageoption, unpsubterm, viewnameoption);
class impl_unparseitem_UnpCtext* UnpCtext (languageoption, Ctext);
class impl_unparseitem_UnpBody* UnpBody (languageoption, unparseitems);
class impl_unparseitem_UViewVarDecl* UViewVarDecl (ID, ID, Cexpression);
class impl_unpsubterm_UnpSubTerm* UnpSubTerm (ID);
class impl_unpsubterm_UnpDollarvarTerm* UnpDollarvarTerm (INT);
class impl_unpsubterm_UnpSubAttr* UnpSubAttr (ID, unpattributes);
class impl_unpsubterm_UnpDollarvarAttr* UnpDollarvarAttr (INT, unpattributes);
class impl_unpsubterm_UnpCastedVariable* UnpCastedVariable (ID, ID);
unpattributes Nilunpattributes();
unpattributes Consunpattributes(ID,unpattributes);
class impl_viewnameoption_NoViewname* NoViewname ();
class impl_viewnameoption_YesViewname* YesViewname (ID);
class impl_languageoption_NoLanguagename* NoLanguagename ();
class impl_languageoption_LanguageList* LanguageList (languagenames);
languagenames Nillanguagenames();
languagenames Conslanguagenames(ID,languagenames);
class impl_fileline_FileLine* FileLine (casestring _file=0, int _line=0);
class impl_fileline_NoFileLine* NoFileLine ();
class impl_fileline_PosNoFileLine* PosNoFileLine ();
scopetypefilelinestack Nilscopetypefilelinestack();
scopetypefilelinestack Consscopetypefilelinestack(scopetypefileline,scopetypefilelinestack);
class impl_scopetypefileline_ScopeTypeFileLine* ScopeTypeFileLine (integer, IDtype, casestring, integer);
class impl_IDtype_ITUnknown* ITUnknown ();
class impl_IDtype_ITPredefinedPhylum* ITPredefinedPhylum (phylumdeclaration);
class impl_IDtype_ITUserPhylum* ITUserPhylum (phylumdeclaration);
class impl_IDtype_ITPredefinedOperator* ITPredefinedOperator (alternative, ID);
class impl_IDtype_ITUserOperator* ITUserOperator (alternative, ID);
class impl_IDtype_ITPredefinedStorageClass* ITPredefinedStorageClass ();
class impl_IDtype_ITStorageClass* ITStorageClass ();
class impl_IDtype_ITPredefinedUView* ITPredefinedUView ();
class impl_IDtype_ITUserUView* ITUserUView ();
class impl_IDtype_ITUViewVar* ITUViewVar ();
class impl_IDtype_ITPredefinedRView* ITPredefinedRView ();
class impl_IDtype_ITUserRView* ITUserRView ();
class impl_IDtype_ITUserFunction* ITUserFunction (fnclass);
class impl_IDtype_ITPatternVariable* ITPatternVariable (ID, integer);
class impl_IDtype_ITLanguageName* ITLanguageName (integer);
operators Niloperators();
operators Consoperators(ID,operators);
phyla Nilphyla();
phyla Consphyla(ID,phyla);
variables Nilvariables();
variables Consvariables(ID,variables);
class impl_dollarvarstatus_DVAllowed* DVAllowed ();
class impl_dollarvarstatus_DVDisallowed* DVDisallowed ();
class impl_tribool_Equal* Equal ();
class impl_tribool_Smaller* Smaller ();
class impl_tribool_Bigger* Bigger ();
patternrepresentations Nilpatternrepresentations();
patternrepresentations Conspatternrepresentations(patternrepresentation,patternrepresentations);
patternrepresentation Nilpatternrepresentation();
patternrepresentation Conspatternrepresentation(elem_patternrepresentation,patternrepresentation);
class impl_elem_patternrepresentation_PRBinding* PRBinding (path, ID);
class impl_elem_patternrepresentation_PRVarPredicate* PRVarPredicate (paths, ID, patternrepresentation);
class impl_elem_patternrepresentation_PROperPredicate* PROperPredicate (path, ID);
class impl_elem_patternrepresentation_PRUserPredicate* PRUserPredicate (Cexpression);
class impl_elem_patternrepresentation_PRNonLeafBinding* PRNonLeafBinding (path, ID, patternrepresentation);
class impl_elem_patternrepresentation_PRWildcard* PRWildcard (path);
class impl_elem_patternrepresentation_PRDefault* PRDefault ();
class impl_elem_patternrepresentation_PRStringLiteral* PRStringLiteral (path, CexpressionDQ);
class impl_elem_patternrepresentation_PRIntLiteral* PRIntLiteral (path, INT);
path Nilpath();
path Conspath(integer,path);
paths Nilpaths();
paths Conspaths(path,paths);
argsnumbers Nilargsnumbers();
argsnumbers Consargsnumbers(integer,argsnumbers);
rewriterulesinfo Nilrewriterulesinfo();
rewriterulesinfo Consrewriterulesinfo(rewriteruleinfo,rewriterulesinfo);
class impl_rewriteruleinfo_Rewriteruleinfo* Rewriteruleinfo (patternrepresentation, patternrepresentation, rewriteclause);
withcasesinfo Nilwithcasesinfo();
withcasesinfo Conswithcasesinfo(withcaseinfo,withcasesinfo);
class impl_withcaseinfo_Withcaseinfo* Withcaseinfo (patternrepresentation, patternrepresentation, Ctext);
rewriteviewsinfo Nilrewriteviewsinfo();
rewriteviewsinfo Consrewriteviewsinfo(rewriteviewinfo,rewriteviewsinfo);
class impl_rewriteviewinfo_Rewriteviewinfo* Rewriteviewinfo (ID, rewriterulesinfo);
unparseviewsinfo Nilunparseviewsinfo();
unparseviewsinfo Consunparseviewsinfo(unparseviewinfo,unparseviewsinfo);
class impl_unparseviewinfo_Unparseviewinfo* Unparseviewinfo (ID, unparsedeclsinfo);
unparsedeclsinfo Nilunparsedeclsinfo();
unparsedeclsinfo Consunparsedeclsinfo(unparsedeclinfo,unparsedeclsinfo);
class impl_unparsedeclinfo_Unparsedeclinfo* Unparsedeclinfo (patternrepresentation, patternrepresentation, unparseclause);
class impl_ac_declaration_AcDeclaration* AcDeclaration (ac_declaration_specifiers, ac_init_declarator_list);
ac_declaration_list Nilac_declaration_list();
ac_declaration_list Consac_declaration_list(ac_declaration,ac_declaration_list);
ac_declaration_specifiers Nilac_declaration_specifiers();
ac_declaration_specifiers Consac_declaration_specifiers(ac_declaration_specifier,ac_declaration_specifiers);
class impl_ac_declaration_specifier_AcDeclSpecStorageSpec* AcDeclSpecStorageSpec (ac_storage_class_specifier);
class impl_ac_declaration_specifier_AcDeclSpecTypeSpec* AcDeclSpecTypeSpec (ac_type_specifier);
class impl_ac_declaration_specifier_AcDeclSpecTypeQual* AcDeclSpecTypeQual (ac_type_qualifier);
class impl_ac_storage_class_specifier_AcAuto* AcAuto ();
class impl_ac_storage_class_specifier_AcRegister* AcRegister ();
class impl_ac_storage_class_specifier_AcStatic* AcStatic ();
class impl_ac_storage_class_specifier_AcExtern* AcExtern ();
class impl_ac_storage_class_specifier_AcTypedef* AcTypedef ();
class impl_ac_storage_class_specifier_AcVirtual* AcVirtual ();
class impl_ac_type_specifier_AcTypeSpec* AcTypeSpec (ID);
class impl_ac_type_qualifier_AcConst* AcConst ();
class impl_ac_type_qualifier_AcVolatile* AcVolatile ();
class impl_ac_type_qualifier_AcUnsigned* AcUnsigned ();
class impl_ac_type_qualifier_AcNoQualifier* AcNoQualifier ();
ac_init_declarator_list Nilac_init_declarator_list();
ac_init_declarator_list Consac_init_declarator_list(ac_init_declarator,ac_init_declarator_list);
class impl_ac_init_declarator_AcInitDecl* AcInitDecl (ac_declarator);
class impl_ac_declarator_AcDeclarator* AcDeclarator (ac_pointer_option, ac_ref_option, ac_direct_declarator);
class impl_ac_direct_declarator_AcDirectDeclId* AcDirectDeclId (ID);
class impl_ac_direct_declarator_AcDirectDeclPack* AcDirectDeclPack (ac_declarator);
class impl_ac_direct_declarator_AcDirectDeclArray* AcDirectDeclArray (ac_direct_declarator, ac_constant_expression_option);
class impl_ac_direct_declarator_AcDirectDeclProto* AcDirectDeclProto (ac_direct_declarator, ac_parameter_type_list);
class impl_ac_direct_declarator_AcQualifiedDeclProto* AcQualifiedDeclProto (ac_class_qualifier_list, ac_direct_declarator, ac_parameter_type_list, ac_type_qualifier);
class impl_ac_direct_declarator_AcMemberDecl* AcMemberDecl (ID, ID, ac_constant_expression_list);
class impl_ac_direct_declarator_AcConvOperatorDecl* AcConvOperatorDecl (ID, ID);
class impl_ac_direct_declarator_AcOperatorDeclId* AcOperatorDeclId (ac_operator_name);
class impl_ac_pointer_option_Nopointer* Nopointer ();
class impl_ac_pointer_option_Yespointer* Yespointer (ac_pointer);
class impl_ac_pointer_AcPointerNil* AcPointerNil (ac_type_qualifier_list);
class impl_ac_pointer_AcPointerCons* AcPointerCons (ac_type_qualifier_list, ac_pointer);
class impl_ac_ref_option_AcNoRef* AcNoRef ();
class impl_ac_ref_option_AcRef* AcRef ();
class impl_ac_operator_name_AcOperatorName* AcOperatorName (casestring);
ac_class_qualifier_help_list Nilac_class_qualifier_help_list();
ac_class_qualifier_help_list Consac_class_qualifier_help_list(ac_direct_declarator,ac_class_qualifier_help_list);
ac_class_qualifier_list Nilac_class_qualifier_list();
ac_class_qualifier_list Consac_class_qualifier_list(ID,ac_class_qualifier_list);
ac_type_qualifier_list Nilac_type_qualifier_list();
ac_type_qualifier_list Consac_type_qualifier_list(ac_type_qualifier,ac_type_qualifier_list);
class impl_ac_parameter_type_list_AcParList* AcParList (ac_parameter_list);
class impl_ac_parameter_type_list_AcParList3Dot* AcParList3Dot (ac_parameter_list);
ac_parameter_list Nilac_parameter_list();
ac_parameter_list Consac_parameter_list(ac_parameter_declaration,ac_parameter_list);
class impl_ac_parameter_declaration_AcParDeclDecl* AcParDeclDecl (ac_declaration_specifiers, ac_declarator, ac_constant_expression_option);
class impl_ac_parameter_declaration_AcParDeclAbsdecl* AcParDeclAbsdecl (ac_declaration_specifiers, ac_abstract_declarator, ac_constant_expression_option);
ac_identifier_list Nilac_identifier_list();
ac_identifier_list Consac_identifier_list(ID,ac_identifier_list);
class impl_ac_abstract_declarator_AcAbsdeclPointer* AcAbsdeclPointer (ac_pointer);
class impl_ac_abstract_declarator_AcAbsdeclDirdecl* AcAbsdeclDirdecl (ac_pointer_option, ac_direct_abstract_declarator);
class impl_ac_direct_abstract_declarator_option_Noac_direct_abstract_declarator* Noac_direct_abstract_declarator ();
class impl_ac_direct_abstract_declarator_option_Yesac_direct_abstract_declarator* Yesac_direct_abstract_declarator (ac_direct_abstract_declarator);
class impl_ac_direct_abstract_declarator_AcDirAbsdeclPack* AcDirAbsdeclPack (ac_abstract_declarator);
class impl_ac_direct_abstract_declarator_AcDirAbsdeclArray* AcDirAbsdeclArray (ac_direct_abstract_declarator_option, ac_constant_expression_option);
class impl_ac_direct_abstract_declarator_AcDirAbsdeclFn* AcDirAbsdeclFn (ac_direct_abstract_declarator_option, ac_parameter_type_list);
class impl_ac_constant_expression_option_Yesac_constant_expression* Yesac_constant_expression (ac_constant_expression);
class impl_ac_constant_expression_option_Noac_constant_expression* Noac_constant_expression ();
class impl_ac_constant_expression_AcConstExpr* AcConstExpr (Cexpression);
ac_constant_expression_list Nilac_constant_expression_list();
ac_constant_expression_list Consac_constant_expression_list(ac_constant_expression,ac_constant_expression_list);
class impl_ac_opt_base_init_list_AcNoBaseInit* AcNoBaseInit ();
class impl_ac_opt_base_init_list_AcYesBaseInit* AcYesBaseInit (ac_base_init_list);
ac_base_init_list Nilac_base_init_list();
ac_base_init_list Consac_base_init_list(ac_base_init,ac_base_init_list);
class impl_ac_base_init_AcBaseInit* AcBaseInit (ID, ac_constant_expression);
baseclass_declarations Nilbaseclass_declarations();
baseclass_declarations Consbaseclass_declarations(baseclass_decl,baseclass_declarations);
class impl_baseclass_decl_BaseClassDecl* BaseClassDecl (ID, baseclass_list);
baseclass_list Nilbaseclass_list();
baseclass_list Consbaseclass_list(ID,baseclass_list);
class impl_error_Fatal* Fatal (fileline, problem);
class impl_error_NonFatal* NonFatal (fileline, problem);
class impl_error_Warning* Warning (fileline, problem);
class impl_problem_Problem1* Problem1 (casestring);
class impl_problem_Problem1ID* Problem1ID (casestring, ID);
class impl_problem_Problem1tID* Problem1tID (casestring, ID);
class impl_problem_Problem1we* Problem1we (casestring, withexpression);
class impl_problem_Problem1ID1ID* Problem1ID1ID (casestring, ID, casestring, ID);
class impl_problem_Problem1t1ID* Problem1t1ID (casestring, IDtype, casestring, ID);
class impl_problem_Problem1INT* Problem1INT (casestring, INT);
class impl_problem_Problem1int1* Problem1int1 (casestring, integer, casestring);
class impl_problem_Problem1INT1ID* Problem1INT1ID (casestring, INT, casestring, ID);
class impl_problem_Problem1ID1ID1ID* Problem1ID1ID1ID (casestring, ID, casestring, ID, casestring, ID);
class impl_problem_Problem1INT1ID1ID* Problem1INT1ID1ID (casestring, INT, casestring, ID, casestring, ID);
class impl_problem_Problem1storageoption1ID* Problem1storageoption1ID (casestring, storageoption, casestring, ID);
class impl_problem_Problem2* Problem2 (casestring, casestring);
class impl_problem_Problem3* Problem3 (casestring, casestring, casestring);
class impl_problem_Problem3int1* Problem3int1 (casestring, casestring, casestring, integer, casestring);
class impl_problem_Problem4* Problem4 (casestring, casestring, casestring, casestring);
class impl_problem_Problem5* Problem5 (casestring, casestring, casestring, casestring, casestring);
class impl_problem_Problem6* Problem6 (casestring, casestring, casestring, casestring, casestring, casestring);
addedphylumdeclarations Niladdedphylumdeclarations();
addedphylumdeclarations Consaddedphylumdeclarations(addedphylumdeclaration,addedphylumdeclarations);
class impl_addedphylumdeclaration_AddedPhylumdeclaration* AddedPhylumdeclaration (uniqID);
countedphylumdeclarations Nilcountedphylumdeclarations();
countedphylumdeclarations Conscountedphylumdeclarations(countedphylumdeclaration,countedphylumdeclarations);
class impl_countedphylumdeclaration_CountedPhylumdeclaration* CountedPhylumdeclaration (uniqID);
class impl_charruns_Newlines* Newlines ();
class impl_charruns_QuotedNewlines* QuotedNewlines ();
class impl_charruns_Stars* Stars ();
bindingidmarks Nilbindingidmarks();
bindingidmarks Consbindingidmarks(bindingidmark,bindingidmarks);
class impl_bindingidmark_BindingIdMark* BindingIdMark (uniqID);

//namespace Phylum {

class impl_abstract_phylum {
public:
    virtual enum_operators prod_sel() const =0;
    static const enum_phyla phylum_sel_;
    enum_phyla phylum() const;
    const char* phylum_name() const;
    const char* op_name() const;
    virtual abstract_phylum subphylum(int) const;
    virtual void set_subphylum(int, abstract_phylum);
    void free(bool recursive=true);
    bool eq(c_abstract_phylum) const;
    void print();
    void fprint(FILE *);
    abstract_phylum copy(bool kc_copy_attributes) const;
    void unparse(printer_functor pf, uview uv)
	{ do_unparse(pf, uv); }
    void unparse(printer_function opf, uview uv);
    virtual abstract_phylum rewrite(rview v) { return do_rewrite(v); }
    virtual abstract_phylum do_rewrite(rview) { return this;}
    // called if a subphylum of an op is rewritten and a new op is created by default rule
    virtual void rewrite_members(abstract_phylum from) {} 
    virtual void post_create(){}
    virtual ~impl_abstract_phylum() { }
private:
    virtual void do_unparse(printer_functor, uview) =0;
protected:
    virtual void default_unparse(printer_functor, uview);
};


class impl_abstract_list: public impl_abstract_phylum{
private:
    void fprint_list(FILE *);
    friend class impl_abstract_phylum;
protected:
    abstract_phylum do_concat(c_abstract_phylum other, enum_operators) const;
    abstract_phylum do_reverse(c_abstract_phylum tail, enum_operators) const;
    abstract_phylum do_map(abstract_phylum (*kc_fp)(abstract_phylum), enum_operators);
    abstract_phylum do_filter(bool (*kc_fp)(abstract_phylum), enum_operators);
    abstract_list   do_append(abstract_phylum, abstract_list);
    abstract_phylum do_merge(abstract_list,abstract_phylum (*kc_fp)(abstract_phylum,abstract_phylum), enum_operators);
    abstract_phylum do_reduce(abstract_phylum neutral, abstract_phylum (*kc_fp)(abstract_phylum,abstract_phylum));
public:
    virtual bool is_nil() const =0;
    virtual abstract_list reverse() const =0;
    int length() const;
    abstract_phylum last() const;
    // Non-virtual, non-existing... Type must be known exactly anyway because
    // of the function given as a parameter
    //virtual abstract_list map( abstract_phylum (*)( abstract_phylum )) =0;
    //virtual abstract_list filter(bool (*)(abstract_phylum)) =0;
    void freelist();
};

abstract_phylum kc_create(enum_operators createOp, abstract_phylum=0, abstract_phylum=0, abstract_phylum=0, abstract_phylum=0, abstract_phylum=0, abstract_phylum=0, abstract_phylum=0);
abstract_phylum& attributeOf(abstract_phylum kc_p, int no);

class impl_nocasestring_NoCaseStr;
typedef impl_nocasestring_NoCaseStr impl_nocasestring;
class impl_nocasestring_NoCaseStr:public impl_abstract_phylum{
public:
    enum_operators prod_sel() const
	{ return sel_NoCaseStr; }
    static const enum_phyla phylum_sel_;
private:
    explicit impl_nocasestring_NoCaseStr(const kc_char*);
    void make_own(int length);
    friend nocasestring mknocasestring(const kc_char*, int);
public:
    ~impl_nocasestring_NoCaseStr() {
#if defined (_MSC_VER) && _MSC_VER<1300
	delete [] (kc_char*)name;
#else
	delete [] name;
#endif
    }

    nocasestring rewrite( rview )
	{ return this; }
    kc_char const* name;
private:
    void do_unparse(printer_functor, uview);
};
class impl_casestring__Str;
typedef impl_casestring__Str impl_casestring;
class impl_casestring__Str:public impl_abstract_phylum{
public:
    enum_operators prod_sel() const
	{ return sel__Str; }
    static const enum_phyla phylum_sel_;
private:
    explicit impl_casestring__Str(const kc_char*);
    void make_own(int length);
    friend casestring mkcasestring(const kc_char*, int);
public:
    ~impl_casestring__Str() {
#if defined (_MSC_VER) && _MSC_VER<1300
	delete [] (kc_char*)name;
#else
	delete [] name;
#endif
    }

    casestring rewrite( rview )
	{ return this; }
    kc_char const* name;
private:
    void do_unparse(printer_functor, uview);
};
class impl_real__Real;
typedef impl_real__Real impl_real;
class impl_real__Real:public impl_abstract_phylum{
public:
    enum_operators prod_sel() const
	{ return sel__Real; }
    static const enum_phyla phylum_sel_;
    explicit impl_real__Real(REAL _value);

    real rewrite( rview )
	{ return this; }
    REAL value;
private:
    void do_unparse(printer_functor, uview);
};
class impl_integer__Int;
typedef impl_integer__Int impl_integer;
class impl_integer__Int:public impl_abstract_phylum{
public:
    enum_operators prod_sel() const
	{ return sel__Int; }
    static const enum_phyla phylum_sel_;
    explicit impl_integer__Int(INTEGER _value);

    integer rewrite( rview )
	{ return this; }
    INTEGER value;
private:
    void do_unparse(printer_functor, uview);
};
class impl_voidptr__VoidPtr;
typedef impl_voidptr__VoidPtr impl_voidptr;
class impl_voidptr__VoidPtr:public impl_abstract_phylum{
public:
    enum_operators prod_sel() const
	{ return sel__VoidPtr; }
    static const enum_phyla phylum_sel_;
    explicit impl_voidptr__VoidPtr(void* _pointer);

    voidptr rewrite( rview )
	{ return this; }
    void* pointer;
private:
    void do_unparse(printer_functor, uview);
};
class impl_uniqID: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    IDtype type;
    int line;
    casestring file;
    scopetypefilelinestack scopeinfo;
    uniqID rewrite(rview) =0;
};
class impl_uniqID_Str:public impl_uniqID{
public:
    enum_operators prod_sel() const
	{ return sel_Str; }
    explicit impl_uniqID_Str(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    uniqID rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ID: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    IDtype type;
    casestring named_subphylum;
    int line;
    casestring file;
    ID rewrite(rview) =0;
};
class impl_ID_Id:public impl_ID{
public:
    enum_operators prod_sel() const
	{ return sel_Id; }
    explicit impl_ID_Id(uniqID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ID rewrite( rview );
    impl_uniqID* uniqID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_INT: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    INT rewrite(rview) =0;
};
class impl_INT_Int:public impl_INT{
public:
    enum_operators prod_sel() const
	{ return sel_Int; }
    explicit impl_INT_Int(integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    INT rewrite( rview );
    impl_integer* integer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_STRING: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    STRING rewrite(rview) =0;
};
class impl_STRING_String:public impl_STRING{
public:
    enum_operators prod_sel() const
	{ return sel_String; }
    explicit impl_STRING_String(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    STRING rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_phylumdeclarationsroot: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    phylumdeclarationsroot rewrite(rview) =0;
};
class impl_phylumdeclarationsroot_PhylumDeclarations:public impl_phylumdeclarationsroot{
public:
    enum_operators prod_sel() const
	{ return sel_PhylumDeclarations; }
    explicit impl_phylumdeclarationsroot_PhylumDeclarations(phylumdeclarations);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    phylumdeclarationsroot rewrite( rview );
    impl_phylumdeclarations* phylumdeclarations_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_phylumdeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilphylumdeclarations: sel_Consphylumdeclarations;
    }
    explicit impl_phylumdeclarations(phylumdeclaration = 0, phylumdeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend phylumdeclarations concat(c_phylumdeclarations, c_phylumdeclarations);
    phylumdeclarations reverse() const;
    phylumdeclarations rewrite(rview);
    phylumdeclaration last() const;
    phylumdeclarations append(phylumdeclaration);
    phylumdeclarations map(phylumdeclaration (*)(phylumdeclaration));
    phylumdeclarations filter( bool (*)(phylumdeclaration));
    phylumdeclarations merge( phylumdeclarations, phylumdeclaration (*)(phylumdeclaration, phylumdeclaration));
    phylumdeclaration reduce( phylumdeclaration, phylumdeclaration (*)(phylumdeclaration, phylumdeclaration));
    bool is_nil() const;
    phylumdeclaration phylumdeclaration_1;
    phylumdeclarations phylumdeclarations_1;
private:
    impl_phylumdeclarations* nil_rewrite(rview);
    impl_phylumdeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_phylumnames: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilphylumnames: sel_Consphylumnames;
    }
    explicit impl_phylumnames(ID = 0, phylumnames = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend phylumnames concat(c_phylumnames, c_phylumnames);
    phylumnames reverse() const;
    phylumnames rewrite(rview);
    ID last() const;
    phylumnames append(ID);
    phylumnames map(ID (*)(ID));
    phylumnames filter( bool (*)(ID));
    phylumnames merge( phylumnames, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    phylumnames phylumnames_1;
private:
    impl_phylumnames* nil_rewrite(rview);
    impl_phylumnames* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_phylumdeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int marked;
    fndeclarations additional_members;
    baseclass_list base_classes;
    phylumdeclaration rewrite(rview) =0;
};
class impl_phylumdeclaration_PhylumDeclaration:public impl_phylumdeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_PhylumDeclaration; }
    explicit impl_phylumdeclaration_PhylumDeclaration(ID, storageoption, productionblock, Ccode_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    phylumdeclaration rewrite( rview );
    impl_ID* ID_1;
    impl_storageoption* storageoption_1;
    impl_productionblock* productionblock_1;
    impl_Ccode_option* Ccode_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_storageoption: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    storageoption rewrite(rview) =0;
};
class impl_storageoption_PositiveStorageOption:public impl_storageoption{
public:
    enum_operators prod_sel() const
	{ return sel_PositiveStorageOption; }
    explicit impl_storageoption_PositiveStorageOption(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    storageoption rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_storageoption_NegativeStorageOption:public impl_storageoption{
public:
    enum_operators prod_sel() const
	{ return sel_NegativeStorageOption; }
    explicit impl_storageoption_NegativeStorageOption(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    storageoption rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_storageoption_NoStorageOption:public impl_storageoption{
public:
    enum_operators prod_sel() const
	{ return sel_NoStorageOption; }
    explicit impl_storageoption_NoStorageOption();

    storageoption rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_storageclasses: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    phylumnames phyla;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilstorageclasses: sel_Consstorageclasses;
    }
    explicit impl_storageclasses(ID = 0, storageclasses = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend storageclasses concat(c_storageclasses, c_storageclasses);
    storageclasses reverse() const;
    storageclasses rewrite(rview);
    ID last() const;
    storageclasses append(ID);
    storageclasses map(ID (*)(ID));
    storageclasses filter( bool (*)(ID));
    storageclasses merge( storageclasses, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    storageclasses storageclasses_1;
private:
    impl_storageclasses* nil_rewrite(rview);
    impl_storageclasses* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_productionblock: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    productionblock rewrite(rview) =0;
};
class impl_productionblock_PredefinedAlternatives:public impl_productionblock{
public:
    enum_operators prod_sel() const
	{ return sel_PredefinedAlternatives; }
    explicit impl_productionblock_PredefinedAlternatives(alternatives);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    productionblock rewrite( rview );
    impl_alternatives* alternatives_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_productionblock_NonlistAlternatives:public impl_productionblock{
public:
    enum_operators prod_sel() const
	{ return sel_NonlistAlternatives; }
    explicit impl_productionblock_NonlistAlternatives(alternatives);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    productionblock rewrite( rview );
    impl_alternatives* alternatives_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_productionblock_ListAlternatives:public impl_productionblock{
public:
    enum_operators prod_sel() const
	{ return sel_ListAlternatives; }
    explicit impl_productionblock_ListAlternatives(alternatives, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    productionblock rewrite( rview );
    impl_alternatives* alternatives_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_productionblock_Emptyproductionblock:public impl_productionblock{
public:
    enum_operators prod_sel() const
	{ return sel_Emptyproductionblock; }
    explicit impl_productionblock_Emptyproductionblock();

    productionblock rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_alternatives: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilalternatives: sel_Consalternatives;
    }
    explicit impl_alternatives(alternative = 0, alternatives = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend alternatives concat(c_alternatives, c_alternatives);
    alternatives reverse() const;
    alternatives rewrite(rview);
    alternative last() const;
    alternatives append(alternative);
    alternatives map(alternative (*)(alternative));
    alternatives filter( bool (*)(alternative));
    alternatives merge( alternatives, alternative (*)(alternative, alternative));
    alternative reduce( alternative, alternative (*)(alternative, alternative));
    bool is_nil() const;
    alternative alternative_1;
    alternatives alternatives_1;
private:
    impl_alternatives* nil_rewrite(rview);
    impl_alternatives* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_alternative: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    rewriterulesinfo rewriteinfo;
    unparsedeclsinfo unparseinfo;
    fndeclarations additional_members;
    baseclass_list base_classes;
    alternative rewrite(rview) =0;
};
class impl_alternative_Alternative:public impl_alternative{
public:
    enum_operators prod_sel() const
	{ return sel_Alternative; }
    explicit impl_alternative_Alternative(ID, arguments);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    alternative rewrite( rview );
    impl_ID* ID_1;
    impl_arguments* arguments_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_arguments: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    int seqnr;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilarguments: sel_Consarguments;
    }
    explicit impl_arguments(ID = 0, arguments = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend arguments concat(c_arguments, c_arguments);
    arguments reverse() const;
    arguments rewrite(rview);
    ID last() const;
    arguments append(ID);
    arguments map(ID (*)(ID));
    arguments filter( bool (*)(ID));
    arguments merge( arguments, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    arguments arguments_1;
private:
    impl_arguments* nil_rewrite(rview);
    impl_arguments* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_argument: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    argument rewrite(rview) =0;
};
class impl_argument_Argument:public impl_argument{
public:
    enum_operators prod_sel() const
	{ return sel_Argument; }
    explicit impl_argument_Argument(ID, integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    argument rewrite( rview );
    impl_ID* ID_1;
    impl_integer* integer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ccode_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    Ccode_option rewrite(rview) =0;
};
class impl_Ccode_option_CcodeOption:public impl_Ccode_option{
public:
    enum_operators prod_sel() const
	{ return sel_CcodeOption; }
    explicit impl_Ccode_option_CcodeOption(attributes, Ctexts);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ccode_option rewrite( rview );
    impl_attributes* attributes_1;
    impl_Ctexts* Ctexts_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_attributes: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilattributes: sel_Consattributes;
    }
    explicit impl_attributes(attribute = 0, attributes = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend attributes concat(c_attributes, c_attributes);
    attributes reverse() const;
    attributes rewrite(rview);
    attribute last() const;
    attributes append(attribute);
    attributes map(attribute (*)(attribute));
    attributes filter( bool (*)(attribute));
    attributes merge( attributes, attribute (*)(attribute, attribute));
    attribute reduce( attribute, attribute (*)(attribute, attribute));
    bool is_nil() const;
    attribute attribute_1;
    attributes attributes_1;
private:
    impl_attributes* nil_rewrite(rview);
    impl_attributes* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_attribute: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    attribute rewrite(rview) =0;
};
class impl_attribute_Attribute:public impl_attribute{
public:
    enum_operators prod_sel() const
	{ return sel_Attribute; }
    explicit impl_attribute_Attribute(ID, ID, attribute_initialisation_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    attribute rewrite( rview );
    impl_ID* ID_1;
    impl_ID* ID_2;
    impl_attribute_initialisation_option* attribute_initialisation_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_attribute_initialisation_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    attribute_initialisation_option rewrite(rview) =0;
};
class impl_attribute_initialisation_option_Yesattribute_initialisation:public impl_attribute_initialisation_option{
public:
    enum_operators prod_sel() const
	{ return sel_Yesattribute_initialisation; }
    explicit impl_attribute_initialisation_option_Yesattribute_initialisation(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    attribute_initialisation_option rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_attribute_initialisation_option_Noattribute_initialisation:public impl_attribute_initialisation_option{
public:
    enum_operators prod_sel() const
	{ return sel_Noattribute_initialisation; }
    explicit impl_attribute_initialisation_option_Noattribute_initialisation();

    attribute_initialisation_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilCexpression: sel_ConsCexpression;
    }
    explicit impl_Cexpression(Cexpression_elem = 0, Cexpression = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend Cexpression concat(c_Cexpression, c_Cexpression);
    Cexpression reverse() const;
    Cexpression rewrite(rview);
    Cexpression_elem last() const;
    Cexpression append(Cexpression_elem);
    Cexpression map(Cexpression_elem (*)(Cexpression_elem));
    Cexpression filter( bool (*)(Cexpression_elem));
    Cexpression merge( Cexpression, Cexpression_elem (*)(Cexpression_elem, Cexpression_elem));
    Cexpression_elem reduce( Cexpression_elem, Cexpression_elem (*)(Cexpression_elem, Cexpression_elem));
    bool is_nil() const;
    Cexpression_elem Cexpression_elem_1;
    Cexpression Cexpression_1;
private:
    impl_Cexpression* nil_rewrite(rview);
    impl_Cexpression* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    Cexpression_elem rewrite(rview) =0;
};
class impl_Cexpression_elem_CExpressionArray:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionArray; }
    explicit impl_Cexpression_elem_CExpressionArray(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionPack:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionPack; }
    explicit impl_Cexpression_elem_CExpressionPack(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionSQ:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionSQ; }
    explicit impl_Cexpression_elem_CExpressionSQ(CexpressionSQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_CexpressionSQ* CexpressionSQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionDQ:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionDQ; }
    explicit impl_Cexpression_elem_CExpressionDQ(CexpressionDQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_CexpressionDQ* CexpressionDQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionNl:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionNl; }
    explicit impl_Cexpression_elem_CExpressionNl();

    Cexpression_elem rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionDollarvar:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionDollarvar; }
    explicit impl_Cexpression_elem_CExpressionDollarvar(INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Cexpression_elem_CExpressionPart:public impl_Cexpression_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionPart; }
    explicit impl_Cexpression_elem_CExpressionPart(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Cexpression_elem rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionDQ: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilCexpressionDQ: sel_ConsCexpressionDQ;
    }
    explicit impl_CexpressionDQ(CexpressionDQ_elem = 0, CexpressionDQ = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend CexpressionDQ concat(c_CexpressionDQ, c_CexpressionDQ);
    CexpressionDQ reverse() const;
    CexpressionDQ rewrite(rview);
    CexpressionDQ_elem last() const;
    CexpressionDQ append(CexpressionDQ_elem);
    CexpressionDQ map(CexpressionDQ_elem (*)(CexpressionDQ_elem));
    CexpressionDQ filter( bool (*)(CexpressionDQ_elem));
    CexpressionDQ merge( CexpressionDQ, CexpressionDQ_elem (*)(CexpressionDQ_elem, CexpressionDQ_elem));
    CexpressionDQ_elem reduce( CexpressionDQ_elem, CexpressionDQ_elem (*)(CexpressionDQ_elem, CexpressionDQ_elem));
    bool is_nil() const;
    CexpressionDQ_elem CexpressionDQ_elem_1;
    CexpressionDQ CexpressionDQ_1;
private:
    impl_CexpressionDQ* nil_rewrite(rview);
    impl_CexpressionDQ* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionDQ_elem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    CexpressionDQ_elem rewrite(rview) =0;
};
class impl_CexpressionDQ_elem_CExpressionDQNl:public impl_CexpressionDQ_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionDQNl; }
    explicit impl_CexpressionDQ_elem_CExpressionDQNl();

    CexpressionDQ_elem rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionDQ_elem_CExpressionDQPart:public impl_CexpressionDQ_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionDQPart; }
    explicit impl_CexpressionDQ_elem_CExpressionDQPart(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    CexpressionDQ_elem rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionSQ: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilCexpressionSQ: sel_ConsCexpressionSQ;
    }
    explicit impl_CexpressionSQ(CexpressionSQ_elem = 0, CexpressionSQ = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend CexpressionSQ concat(c_CexpressionSQ, c_CexpressionSQ);
    CexpressionSQ reverse() const;
    CexpressionSQ rewrite(rview);
    CexpressionSQ_elem last() const;
    CexpressionSQ append(CexpressionSQ_elem);
    CexpressionSQ map(CexpressionSQ_elem (*)(CexpressionSQ_elem));
    CexpressionSQ filter( bool (*)(CexpressionSQ_elem));
    CexpressionSQ merge( CexpressionSQ, CexpressionSQ_elem (*)(CexpressionSQ_elem, CexpressionSQ_elem));
    CexpressionSQ_elem reduce( CexpressionSQ_elem, CexpressionSQ_elem (*)(CexpressionSQ_elem, CexpressionSQ_elem));
    bool is_nil() const;
    CexpressionSQ_elem CexpressionSQ_elem_1;
    CexpressionSQ CexpressionSQ_1;
private:
    impl_CexpressionSQ* nil_rewrite(rview);
    impl_CexpressionSQ* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionSQ_elem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    CexpressionSQ_elem rewrite(rview) =0;
};
class impl_CexpressionSQ_elem_CExpressionSQNl:public impl_CexpressionSQ_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionSQNl; }
    explicit impl_CexpressionSQ_elem_CExpressionSQNl();

    CexpressionSQ_elem rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_CexpressionSQ_elem_CExpressionSQPart:public impl_CexpressionSQ_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CExpressionSQPart; }
    explicit impl_CexpressionSQ_elem_CExpressionSQPart(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    CexpressionSQ_elem rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_idCexpressions: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilidCexpressions: sel_ConsidCexpressions;
    }
    explicit impl_idCexpressions(idCexpression = 0, idCexpressions = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend idCexpressions concat(c_idCexpressions, c_idCexpressions);
    idCexpressions reverse() const;
    idCexpressions rewrite(rview);
    idCexpression last() const;
    idCexpressions append(idCexpression);
    idCexpressions map(idCexpression (*)(idCexpression));
    idCexpressions filter( bool (*)(idCexpression));
    idCexpressions merge( idCexpressions, idCexpression (*)(idCexpression, idCexpression));
    idCexpression reduce( idCexpression, idCexpression (*)(idCexpression, idCexpression));
    bool is_nil() const;
    idCexpression idCexpression_1;
    idCexpressions idCexpressions_1;
private:
    impl_idCexpressions* nil_rewrite(rview);
    impl_idCexpressions* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_idCexpression: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ID id;
    idCexpression rewrite(rview) =0;
};
class impl_idCexpression_IdCexpression:public impl_idCexpression{
public:
    enum_operators prod_sel() const
	{ return sel_IdCexpression; }
    explicit impl_idCexpression_IdCexpression(ID, Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    idCexpression rewrite( rview );
    impl_ID* ID_1;
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctexts: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilCtexts: sel_ConsCtexts;
    }
    explicit impl_Ctexts(Ctext = 0, Ctexts = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend Ctexts concat(c_Ctexts, c_Ctexts);
    Ctexts reverse() const;
    Ctexts rewrite(rview);
    Ctext last() const;
    Ctexts append(Ctext);
    Ctexts map(Ctext (*)(Ctext));
    Ctexts filter( bool (*)(Ctext));
    Ctexts merge( Ctexts, Ctext (*)(Ctext, Ctext));
    Ctext reduce( Ctext, Ctext (*)(Ctext, Ctext));
    bool is_nil() const;
    Ctext Ctext_1;
    Ctexts Ctexts_1;
private:
    impl_Ctexts* nil_rewrite(rview);
    impl_Ctexts* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_includefiles: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilincludefiles: sel_Consincludefiles;
    }
    explicit impl_includefiles(includefile = 0, includefiles = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend includefiles concat(c_includefiles, c_includefiles);
    includefiles reverse() const;
    includefiles rewrite(rview);
    includefile last() const;
    includefiles append(includefile);
    includefiles map(includefile (*)(includefile));
    includefiles filter( bool (*)(includefile));
    includefiles merge( includefiles, includefile (*)(includefile, includefile));
    includefile reduce( includefile, includefile (*)(includefile, includefile));
    bool is_nil() const;
    includefile includefile_1;
    includefiles includefiles_1;
private:
    impl_includefiles* nil_rewrite(rview);
    impl_includefiles* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_includefile: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    include_type inc_type;
    twoIncludedeclarations inc;
    includefile rewrite(rview) =0;
};
class impl_includefile_IncludeFile:public impl_includefile{
public:
    enum_operators prod_sel() const
	{ return sel_IncludeFile; }
    explicit impl_includefile_IncludeFile(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    includefile rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_includedeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilincludedeclarations: sel_Consincludedeclarations;
    }
    explicit impl_includedeclarations(includedeclaration = 0, includedeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend includedeclarations concat(c_includedeclarations, c_includedeclarations);
    includedeclarations reverse() const;
    includedeclarations rewrite(rview);
    includedeclaration last() const;
    includedeclarations append(includedeclaration);
    includedeclarations map(includedeclaration (*)(includedeclaration));
    includedeclarations filter( bool (*)(includedeclaration));
    includedeclarations merge( includedeclarations, includedeclaration (*)(includedeclaration, includedeclaration));
    includedeclaration reduce( includedeclaration, includedeclaration (*)(includedeclaration, includedeclaration));
    bool is_nil() const;
    includedeclaration includedeclaration_1;
    includedeclarations includedeclarations_1;
private:
    impl_includedeclarations* nil_rewrite(rview);
    impl_includedeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_includedeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    includedeclaration rewrite(rview) =0;
};
class impl_includedeclaration_IncludeDeclaration:public impl_includedeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_IncludeDeclaration; }
    explicit impl_includedeclaration_IncludeDeclaration(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    includedeclaration rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_rwdeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilrwdeclarations: sel_Consrwdeclarations;
    }
    explicit impl_rwdeclarations(rwdeclaration = 0, rwdeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend rwdeclarations concat(c_rwdeclarations, c_rwdeclarations);
    rwdeclarations reverse() const;
    rwdeclarations rewrite(rview);
    rwdeclaration last() const;
    rwdeclarations append(rwdeclaration);
    rwdeclarations map(rwdeclaration (*)(rwdeclaration));
    rwdeclarations filter( bool (*)(rwdeclaration));
    rwdeclarations merge( rwdeclarations, rwdeclaration (*)(rwdeclaration, rwdeclaration));
    rwdeclaration reduce( rwdeclaration, rwdeclaration (*)(rwdeclaration, rwdeclaration));
    bool is_nil() const;
    rwdeclaration rwdeclaration_1;
    rwdeclarations rwdeclarations_1;
private:
    impl_rwdeclarations* nil_rewrite(rview);
    impl_rwdeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_rwdeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    rwdeclaration rewrite(rview) =0;
};
class impl_rwdeclaration_RwDeclaration:public impl_rwdeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_RwDeclaration; }
    explicit impl_rwdeclaration_RwDeclaration(outmostpatterns, rewriteclauses);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    rwdeclaration rewrite( rview );
    impl_outmostpatterns* outmostpatterns_1;
    impl_rewriteclauses* rewriteclauses_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_rewriteclauses: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilrewriteclauses: sel_Consrewriteclauses;
    }
    explicit impl_rewriteclauses(rewriteclause = 0, rewriteclauses = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend rewriteclauses concat(c_rewriteclauses, c_rewriteclauses);
    rewriteclauses reverse() const;
    rewriteclauses rewrite(rview);
    rewriteclause last() const;
    rewriteclauses append(rewriteclause);
    rewriteclauses map(rewriteclause (*)(rewriteclause));
    rewriteclauses filter( bool (*)(rewriteclause));
    rewriteclauses merge( rewriteclauses, rewriteclause (*)(rewriteclause, rewriteclause));
    rewriteclause reduce( rewriteclause, rewriteclause (*)(rewriteclause, rewriteclause));
    bool is_nil() const;
    rewriteclause rewriteclause_1;
    rewriteclauses rewriteclauses_1;
private:
    impl_rewriteclauses* nil_rewrite(rview);
    impl_rewriteclauses* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_rewriteclause: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    rewriteclause rewrite(rview) =0;
};
class impl_rewriteclause_RewriteClause:public impl_rewriteclause{
public:
    enum_operators prod_sel() const
	{ return sel_RewriteClause; }
    explicit impl_rewriteclause_RewriteClause(viewnames, term);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    rewriteclause rewrite( rview );
    impl_viewnames* viewnames_1;
    impl_term* term_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_patternchains: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpatternchains: sel_Conspatternchains;
    }
    explicit impl_patternchains(patternchain = 0, patternchains = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend patternchains concat(c_patternchains, c_patternchains);
    patternchains reverse() const;
    patternchains rewrite(rview);
    patternchain last() const;
    patternchains append(patternchain);
    patternchains map(patternchain (*)(patternchain));
    patternchains filter( bool (*)(patternchain));
    patternchains merge( patternchains, patternchain (*)(patternchain, patternchain));
    patternchain reduce( patternchain, patternchain (*)(patternchain, patternchain));
    bool is_nil() const;
    patternchain patternchain_1;
    patternchains patternchains_1;
private:
    impl_patternchains* nil_rewrite(rview);
    impl_patternchains* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_patternchain: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpatternchain: sel_Conspatternchain;
    }
    explicit impl_patternchain(patternchainitem = 0, patternchain = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend patternchain concat(c_patternchain, c_patternchain);
    patternchain reverse() const;
    patternchain rewrite(rview);
    patternchainitem last() const;
    patternchain append(patternchainitem);
    patternchain map(patternchainitem (*)(patternchainitem));
    patternchain filter( bool (*)(patternchainitem));
    patternchain merge( patternchain, patternchainitem (*)(patternchainitem, patternchainitem));
    patternchainitem reduce( patternchainitem, patternchainitem (*)(patternchainitem, patternchainitem));
    bool is_nil() const;
    patternchainitem patternchainitem_1;
    patternchain patternchain_1;
private:
    impl_patternchain* nil_rewrite(rview);
    impl_patternchain* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_outmostpatterns: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Niloutmostpatterns: sel_Consoutmostpatterns;
    }
    explicit impl_outmostpatterns(outmostpattern = 0, outmostpatterns = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend outmostpatterns concat(c_outmostpatterns, c_outmostpatterns);
    outmostpatterns reverse() const;
    outmostpatterns rewrite(rview);
    outmostpattern last() const;
    outmostpatterns append(outmostpattern);
    outmostpatterns map(outmostpattern (*)(outmostpattern));
    outmostpatterns filter( bool (*)(outmostpattern));
    outmostpatterns merge( outmostpatterns, outmostpattern (*)(outmostpattern, outmostpattern));
    outmostpattern reduce( outmostpattern, outmostpattern (*)(outmostpattern, outmostpattern));
    bool is_nil() const;
    outmostpattern outmostpattern_1;
    outmostpatterns outmostpatterns_1;
private:
    impl_outmostpatterns* nil_rewrite(rview);
    impl_outmostpatterns* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_patternchainitem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    ID type;
    patternchainitem rewrite(rview) =0;
};
class impl_patternchainitem_PatternchainitemDollarid:public impl_patternchainitem{
public:
    enum_operators prod_sel() const
	{ return sel_PatternchainitemDollarid; }
    explicit impl_patternchainitem_PatternchainitemDollarid(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    patternchainitem rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_patternchainitem_PatternchainitemGroup:public impl_patternchainitem{
public:
    enum_operators prod_sel() const
	{ return sel_PatternchainitemGroup; }
    explicit impl_patternchainitem_PatternchainitemGroup(patternchains);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    patternchainitem rewrite( rview );
    impl_patternchains* patternchains_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_patternchainitem_PatternchainitemOutmost:public impl_patternchainitem{
public:
    enum_operators prod_sel() const
	{ return sel_PatternchainitemOutmost; }
    explicit impl_patternchainitem_PatternchainitemOutmost(outmostpattern);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    patternchainitem rewrite( rview );
    impl_outmostpattern* outmostpattern_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_outmostpattern: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    ID type;
    outmostpattern rewrite(rview) =0;
};
class impl_outmostpattern_OPDefault:public impl_outmostpattern{
public:
    enum_operators prod_sel() const
	{ return sel_OPDefault; }
    explicit impl_outmostpattern_OPDefault(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    outmostpattern rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_outmostpattern_OPWildcard:public impl_outmostpattern{
public:
    enum_operators prod_sel() const
	{ return sel_OPWildcard; }
    explicit impl_outmostpattern_OPWildcard(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    outmostpattern rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_outmostpattern_OPNonLeafVariable:public impl_outmostpattern{
public:
    enum_operators prod_sel() const
	{ return sel_OPNonLeafVariable; }
    explicit impl_outmostpattern_OPNonLeafVariable(ID, outmostpattern);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    outmostpattern rewrite( rview );
    impl_ID* ID_1;
    impl_outmostpattern* outmostpattern_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_outmostpattern_OPOperator:public impl_outmostpattern{
public:
    enum_operators prod_sel() const
	{ return sel_OPOperator; }
    explicit impl_outmostpattern_OPOperator(ID, patterns, Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    outmostpattern rewrite( rview );
    impl_ID* ID_1;
    impl_patterns* patterns_1;
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_outmostpattern_OPOperatorWildcard:public impl_outmostpattern{
public:
    enum_operators prod_sel() const
	{ return sel_OPOperatorWildcard; }
    explicit impl_outmostpattern_OPOperatorWildcard(ID, Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    outmostpattern rewrite( rview );
    impl_ID* ID_1;
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    pattern rewrite(rview) =0;
};
class impl_pattern_PIntLiteral:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_PIntLiteral; }
    explicit impl_pattern_PIntLiteral(INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    pattern rewrite( rview );
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern_PStringLiteral:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_PStringLiteral; }
    explicit impl_pattern_PStringLiteral(CexpressionDQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    pattern rewrite( rview );
    impl_CexpressionDQ* CexpressionDQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern_PWildcard:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_PWildcard; }
    explicit impl_pattern_PWildcard();

    pattern rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern_PNonLeafVariable:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_PNonLeafVariable; }
    explicit impl_pattern_PNonLeafVariable(ID, pattern);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    pattern rewrite( rview );
    impl_ID* ID_1;
    impl_pattern* pattern_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern_POperator:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_POperator; }
    explicit impl_pattern_POperator(ID, patterns);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    pattern rewrite( rview );
    impl_ID* ID_1;
    impl_patterns* patterns_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_pattern_PVariable:public impl_pattern{
public:
    enum_operators prod_sel() const
	{ return sel_PVariable; }
    explicit impl_pattern_PVariable(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    pattern rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_patterns: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpatterns: sel_Conspatterns;
    }
    explicit impl_patterns(pattern = 0, patterns = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend patterns concat(c_patterns, c_patterns);
    patterns reverse() const;
    patterns rewrite(rview);
    pattern last() const;
    patterns append(pattern);
    patterns map(pattern (*)(pattern));
    patterns filter( bool (*)(pattern));
    patterns merge( patterns, pattern (*)(pattern, pattern));
    pattern reduce( pattern, pattern (*)(pattern, pattern));
    bool is_nil() const;
    pattern pattern_1;
    patterns patterns_1;
private:
    impl_patterns* nil_rewrite(rview);
    impl_patterns* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_term: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    term rewrite(rview) =0;
};
class impl_term_TIntLiteral:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TIntLiteral; }
    explicit impl_term_TIntLiteral(INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TStringLiteral:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TStringLiteral; }
    explicit impl_term_TStringLiteral(CexpressionDQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_CexpressionDQ* CexpressionDQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TCTerm:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TCTerm; }
    explicit impl_term_TCTerm(CexpressionSQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_CexpressionSQ* CexpressionSQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TMemberVarDot:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TMemberVarDot; }
    explicit impl_term_TMemberVarDot(term, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_term* term_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TMemberVar:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TMemberVar; }
    explicit impl_term_TMemberVar(term, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_term* term_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TMethodDot:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TMethodDot; }
    explicit impl_term_TMethodDot(term, ID, terms);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_term* term_1;
    impl_ID* ID_1;
    impl_terms* terms_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TMethod:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TMethod; }
    explicit impl_term_TMethod(term, ID, terms);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_term* term_1;
    impl_ID* ID_1;
    impl_terms* terms_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TOperator:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TOperator; }
    explicit impl_term_TOperator(ID, terms);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_ID* ID_1;
    impl_terms* terms_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_term_TVariable:public impl_term{
public:
    enum_operators prod_sel() const
	{ return sel_TVariable; }
    explicit impl_term_TVariable(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    term rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_terms: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilterms: sel_Consterms;
    }
    explicit impl_terms(term = 0, terms = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend terms concat(c_terms, c_terms);
    terms reverse() const;
    terms rewrite(rview);
    term last() const;
    terms append(term);
    terms map(term (*)(term));
    terms filter( bool (*)(term));
    terms merge( terms, term (*)(term, term));
    term reduce( term, term (*)(term, term));
    bool is_nil() const;
    term term_1;
    terms terms_1;
private:
    impl_terms* nil_rewrite(rview);
    impl_terms* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_fnfiles: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilfnfiles: sel_Consfnfiles;
    }
    explicit impl_fnfiles(fnfile = 0, fnfiles = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend fnfiles concat(c_fnfiles, c_fnfiles);
    fnfiles reverse() const;
    fnfiles rewrite(rview);
    fnfile last() const;
    fnfiles append(fnfile);
    fnfiles map(fnfile (*)(fnfile));
    fnfiles filter( bool (*)(fnfile));
    fnfiles merge( fnfiles, fnfile (*)(fnfile, fnfile));
    fnfile reduce( fnfile, fnfile (*)(fnfile, fnfile));
    bool is_nil() const;
    fnfile fnfile_1;
    fnfiles fnfiles_1;
private:
    impl_fnfiles* nil_rewrite(rview);
    impl_fnfiles* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_fnfile: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    fndeclarations fns;
    fnfile rewrite(rview) =0;
};
class impl_fnfile_FnFile:public impl_fnfile{
public:
    enum_operators prod_sel() const
	{ return sel_FnFile; }
    explicit impl_fnfile_FnFile(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    fnfile rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_fndeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilfndeclarations: sel_Consfndeclarations;
    }
    explicit impl_fndeclarations(fndeclaration = 0, fndeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend fndeclarations concat(c_fndeclarations, c_fndeclarations);
    fndeclarations reverse() const;
    fndeclarations rewrite(rview);
    fndeclaration last() const;
    fndeclarations append(fndeclaration);
    fndeclarations map(fndeclaration (*)(fndeclaration));
    fndeclarations filter( bool (*)(fndeclaration));
    fndeclarations merge( fndeclarations, fndeclaration (*)(fndeclaration, fndeclaration));
    fndeclaration reduce( fndeclaration, fndeclaration (*)(fndeclaration, fndeclaration));
    bool is_nil() const;
    fndeclaration fndeclaration_1;
    fndeclarations fndeclarations_1;
private:
    impl_fndeclarations* nil_rewrite(rview);
    impl_fndeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_fndeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_parameter_type_list sorted;
    int last_line;
    casestring file;
    bool is_attr;
    fndeclaration rewrite(rview) =0;
};
class impl_fndeclaration_AcMemberDeclaration:public impl_fndeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_AcMemberDeclaration; }
    explicit impl_fndeclaration_AcMemberDeclaration(ac_declaration_specifiers, ac_declarator, ac_constant_expression_option, fnclass);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    fndeclaration rewrite( rview );
    impl_ac_declaration_specifiers* ac_declaration_specifiers_1;
    impl_ac_declarator* ac_declarator_1;
    impl_ac_constant_expression_option* ac_constant_expression_option_1;
    impl_fnclass* fnclass_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_fndeclaration_FnAcDeclaration:public impl_fndeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_FnAcDeclaration; }
    explicit impl_fndeclaration_FnAcDeclaration(ac_declaration_specifiers, ac_declarator, ac_declaration_list, ac_opt_base_init_list, Ctext, ID, fnclass);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    fndeclaration rewrite( rview );
    impl_ac_declaration_specifiers* ac_declaration_specifiers_1;
    impl_ac_declarator* ac_declarator_1;
    impl_ac_declaration_list* ac_declaration_list_1;
    impl_ac_opt_base_init_list* ac_opt_base_init_list_1;
    impl_Ctext* Ctext_1;
    impl_ID* ID_1;
    impl_fnclass* fnclass_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    fnclass rewrite(rview) =0;
};
class impl_fnclass_ConvOperatorFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_ConvOperatorFn; }
    explicit impl_fnclass_ConvOperatorFn();

    fnclass rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass_DestructorFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_DestructorFn; }
    explicit impl_fnclass_DestructorFn();

    fnclass rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass_ConstructorFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_ConstructorFn; }
    explicit impl_fnclass_ConstructorFn();

    fnclass rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass_MemberFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_MemberFn; }
    explicit impl_fnclass_MemberFn();

    fnclass rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass_StaticFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_StaticFn; }
    explicit impl_fnclass_StaticFn(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    fnclass rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_fnclass_GlobalFn:public impl_fnclass{
public:
    enum_operators prod_sel() const
	{ return sel_GlobalFn; }
    explicit impl_fnclass_GlobalFn();

    fnclass rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    enum_operators prod_sel() const{
	return is_nil() ? sel_NilCtext: sel_ConsCtext;
    }
    explicit impl_Ctext(Ctext_elem = 0, Ctext = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend Ctext concat(c_Ctext, c_Ctext);
    Ctext reverse() const;
    Ctext rewrite(rview);
    Ctext_elem last() const;
    Ctext append(Ctext_elem);
    Ctext map(Ctext_elem (*)(Ctext_elem));
    Ctext filter( bool (*)(Ctext_elem));
    Ctext merge( Ctext, Ctext_elem (*)(Ctext_elem, Ctext_elem));
    Ctext_elem reduce( Ctext_elem, Ctext_elem (*)(Ctext_elem, Ctext_elem));
    bool is_nil() const;
    Ctext_elem Ctext_elem_1;
    Ctext Ctext_1;
private:
    impl_Ctext* nil_rewrite(rview);
    impl_Ctext* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    Ctext_elem rewrite(rview) =0;
};
class impl_Ctext_elem_CTextWithexpression:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextWithexpression; }
    explicit impl_Ctext_elem_CTextWithexpression(withexpressions, withcases, contextinfo);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_withexpressions* withexpressions_1;
    impl_withcases* withcases_1;
    impl_contextinfo* contextinfo_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextForeachexpression:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextForeachexpression; }
    explicit impl_Ctext_elem_CTextForeachexpression(patternchain, idCexpressions, withexpressions, Ctext, foreach_after);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_patternchain* patternchain_1;
    impl_idCexpressions* idCexpressions_1;
    impl_withexpressions* withexpressions_1;
    impl_Ctext* Ctext_1;
    impl_foreach_after* foreach_after_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextCbody:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextCbody; }
    explicit impl_Ctext_elem_CTextCbody(Ctext);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_Ctext* Ctext_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextCexpressionSQ:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextCexpressionSQ; }
    explicit impl_Ctext_elem_CTextCexpressionSQ(CexpressionSQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_CexpressionSQ* CexpressionSQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextCexpressionDQ:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextCexpressionDQ; }
    explicit impl_Ctext_elem_CTextCexpressionDQ(CexpressionDQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_CexpressionDQ* CexpressionDQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextNl:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextNl; }
    explicit impl_Ctext_elem_CTextNl(integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_integer* integer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextDollarVar:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextDollarVar; }
    explicit impl_Ctext_elem_CTextDollarVar(INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_Ctext_elem_CTextLine:public impl_Ctext_elem{
public:
    enum_operators prod_sel() const
	{ return sel_CTextLine; }
    explicit impl_Ctext_elem_CTextLine(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    Ctext_elem rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_foreach_after: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    foreach_after rewrite(rview) =0;
};
class impl_foreach_after_ForeachAfter:public impl_foreach_after{
public:
    enum_operators prod_sel() const
	{ return sel_ForeachAfter; }
    explicit impl_foreach_after_ForeachAfter(patternchain, idCexpressions, withexpressions, Ctext);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    foreach_after rewrite( rview );
    impl_patternchain* patternchain_1;
    impl_idCexpressions* idCexpressions_1;
    impl_withexpressions* withexpressions_1;
    impl_Ctext* Ctext_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_foreach_after_NoForeachAfter:public impl_foreach_after{
public:
    enum_operators prod_sel() const
	{ return sel_NoForeachAfter; }
    explicit impl_foreach_after_NoForeachAfter();

    foreach_after rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_contextinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    contextinfo rewrite(rview) =0;
};
class impl_contextinfo_NotInForeachContext:public impl_contextinfo{
public:
    enum_operators prod_sel() const
	{ return sel_NotInForeachContext; }
    explicit impl_contextinfo_NotInForeachContext();

    contextinfo rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_contextinfo_InForeachContext:public impl_contextinfo{
public:
    enum_operators prod_sel() const
	{ return sel_InForeachContext; }
    explicit impl_contextinfo_InForeachContext(patternchain);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    contextinfo rewrite( rview );
    impl_patternchain* patternchain_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_withexpressions: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    phylumnames type;
    int line;
    casestring file;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilwithexpressions: sel_Conswithexpressions;
    }
    explicit impl_withexpressions(withexpression = 0, withexpressions = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend withexpressions concat(c_withexpressions, c_withexpressions);
    withexpressions reverse() const;
    withexpressions rewrite(rview);
    withexpression last() const;
    withexpressions append(withexpression);
    withexpressions map(withexpression (*)(withexpression));
    withexpressions filter( bool (*)(withexpression));
    withexpressions merge( withexpressions, withexpression (*)(withexpression, withexpression));
    withexpression reduce( withexpression, withexpression (*)(withexpression, withexpression));
    bool is_nil() const;
    withexpression withexpression_1;
    withexpressions withexpressions_1;
private:
    impl_withexpressions* nil_rewrite(rview);
    impl_withexpressions* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_withexpression: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ID type;
    int line;
    casestring file;
    withexpression rewrite(rview) =0;
};
class impl_withexpression_WECexpression:public impl_withexpression{
public:
    enum_operators prod_sel() const
	{ return sel_WECexpression; }
    explicit impl_withexpression_WECexpression(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    withexpression rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_withexpression_WEVariable:public impl_withexpression{
public:
    enum_operators prod_sel() const
	{ return sel_WEVariable; }
    explicit impl_withexpression_WEVariable(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    withexpression rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_withcases: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    withcasesinfo wcinfo;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilwithcases: sel_Conswithcases;
    }
    explicit impl_withcases(withcase = 0, withcases = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend withcases concat(c_withcases, c_withcases);
    withcases reverse() const;
    withcases rewrite(rview);
    withcase last() const;
    withcases append(withcase);
    withcases map(withcase (*)(withcase));
    withcases filter( bool (*)(withcase));
    withcases merge( withcases, withcase (*)(withcase, withcase));
    withcase reduce( withcase, withcase (*)(withcase, withcase));
    bool is_nil() const;
    withcase withcase_1;
    withcases withcases_1;
private:
    impl_withcases* nil_rewrite(rview);
    impl_withcases* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_withcase: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    withcasesinfo wcinfo;
    withcase rewrite(rview) =0;
};
class impl_withcase_Withcase:public impl_withcase{
public:
    enum_operators prod_sel() const
	{ return sel_Withcase; }
    explicit impl_withcase_Withcase(patternchains, Ctext);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    withcase rewrite( rview );
    impl_patternchains* patternchains_1;
    impl_Ctext* Ctext_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparsedeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunparsedeclarations: sel_Consunparsedeclarations;
    }
    explicit impl_unparsedeclarations(unparsedeclaration = 0, unparsedeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unparsedeclarations concat(c_unparsedeclarations, c_unparsedeclarations);
    unparsedeclarations reverse() const;
    unparsedeclarations rewrite(rview);
    unparsedeclaration last() const;
    unparsedeclarations append(unparsedeclaration);
    unparsedeclarations map(unparsedeclaration (*)(unparsedeclaration));
    unparsedeclarations filter( bool (*)(unparsedeclaration));
    unparsedeclarations merge( unparsedeclarations, unparsedeclaration (*)(unparsedeclaration, unparsedeclaration));
    unparsedeclaration reduce( unparsedeclaration, unparsedeclaration (*)(unparsedeclaration, unparsedeclaration));
    bool is_nil() const;
    unparsedeclaration unparsedeclaration_1;
    unparsedeclarations unparsedeclarations_1;
private:
    impl_unparsedeclarations* nil_rewrite(rview);
    impl_unparsedeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparsedeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    patternrepresentations patternreps;
    unparsedeclaration rewrite(rview) =0;
};
class impl_unparsedeclaration_UnparseDeclaration:public impl_unparsedeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_UnparseDeclaration; }
    explicit impl_unparsedeclaration_UnparseDeclaration(outmostpatterns, unparseclauses);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparsedeclaration rewrite( rview );
    impl_outmostpatterns* outmostpatterns_1;
    impl_unparseclauses* unparseclauses_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseclauses: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunparseclauses: sel_Consunparseclauses;
    }
    explicit impl_unparseclauses(unparseclause = 0, unparseclauses = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unparseclauses concat(c_unparseclauses, c_unparseclauses);
    unparseclauses reverse() const;
    unparseclauses rewrite(rview);
    unparseclause last() const;
    unparseclauses append(unparseclause);
    unparseclauses map(unparseclause (*)(unparseclause));
    unparseclauses filter( bool (*)(unparseclause));
    unparseclauses merge( unparseclauses, unparseclause (*)(unparseclause, unparseclause));
    unparseclause reduce( unparseclause, unparseclause (*)(unparseclause, unparseclause));
    bool is_nil() const;
    unparseclause unparseclause_1;
    unparseclauses unparseclauses_1;
private:
    impl_unparseclauses* nil_rewrite(rview);
    impl_unparseclauses* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparseclause: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    unparseclause rewrite(rview) =0;
};
class impl_unparseclause_UnparseClause:public impl_unparseclause{
public:
    enum_operators prod_sel() const
	{ return sel_UnparseClause; }
    explicit impl_unparseclause_UnparseClause(viewnames, unparseitems);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseclause rewrite( rview );
    impl_viewnames* viewnames_1;
    impl_unparseitems* unparseitems_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_viewnames: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    bool is_extern;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilviewnames: sel_Consviewnames;
    }
    explicit impl_viewnames(ID = 0, viewnames = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend viewnames concat(c_viewnames, c_viewnames);
    viewnames reverse() const;
    viewnames rewrite(rview);
    ID last() const;
    viewnames append(ID);
    viewnames map(ID (*)(ID));
    viewnames filter( bool (*)(ID));
    viewnames merge( viewnames, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    viewnames viewnames_1;
private:
    impl_viewnames* nil_rewrite(rview);
    impl_viewnames* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparseitems: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunparseitems: sel_Consunparseitems;
    }
    explicit impl_unparseitems(unparseitem = 0, unparseitems = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unparseitems concat(c_unparseitems, c_unparseitems);
    unparseitems reverse() const;
    unparseitems rewrite(rview);
    unparseitem last() const;
    unparseitems append(unparseitem);
    unparseitems map(unparseitem (*)(unparseitem));
    unparseitems filter( bool (*)(unparseitem));
    unparseitems merge( unparseitems, unparseitem (*)(unparseitem, unparseitem));
    unparseitem reduce( unparseitem, unparseitem (*)(unparseitem, unparseitem));
    bool is_nil() const;
    unparseitem unparseitem_1;
    unparseitems unparseitems_1;
private:
    impl_unparseitems* nil_rewrite(rview);
    impl_unparseitems* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparseitem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int text_nr;
    unparseitem rewrite(rview) =0;
};
class impl_unparseitem_UViewVarDecl:public impl_unparseitem{
public:
    enum_operators prod_sel() const
	{ return sel_UViewVarDecl; }
    explicit impl_unparseitem_UViewVarDecl(ID, ID, Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseitem rewrite( rview );
    impl_ID* ID_1;
    impl_ID* ID_2;
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseitem_UnpBody:public impl_unparseitem{
public:
    enum_operators prod_sel() const
	{ return sel_UnpBody; }
    explicit impl_unparseitem_UnpBody(languageoption, unparseitems);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseitem rewrite( rview );
    impl_languageoption* languageoption_1;
    impl_unparseitems* unparseitems_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseitem_UnpCtext:public impl_unparseitem{
public:
    enum_operators prod_sel() const
	{ return sel_UnpCtext; }
    explicit impl_unparseitem_UnpCtext(languageoption, Ctext);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseitem rewrite( rview );
    impl_languageoption* languageoption_1;
    impl_Ctext* Ctext_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseitem_UnpSubexpr:public impl_unparseitem{
public:
    enum_operators prod_sel() const
	{ return sel_UnpSubexpr; }
    explicit impl_unparseitem_UnpSubexpr(languageoption, unpsubterm, viewnameoption);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseitem rewrite( rview );
    impl_languageoption* languageoption_1;
    impl_unpsubterm* unpsubterm_1;
    impl_viewnameoption* viewnameoption_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseitem_UnpStr:public impl_unparseitem{
public:
    enum_operators prod_sel() const
	{ return sel_UnpStr; }
    explicit impl_unparseitem_UnpStr(languageoption, CexpressionDQ, viewnameoption);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseitem rewrite( rview );
    impl_languageoption* languageoption_1;
    impl_CexpressionDQ* CexpressionDQ_1;
    impl_viewnameoption* viewnameoption_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpsubterm: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    unpsubterm rewrite(rview) =0;
};
class impl_unpsubterm_UnpCastedVariable:public impl_unpsubterm{
public:
    enum_operators prod_sel() const
	{ return sel_UnpCastedVariable; }
    explicit impl_unpsubterm_UnpCastedVariable(ID, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unpsubterm rewrite( rview );
    impl_ID* ID_1;
    impl_ID* ID_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpsubterm_UnpDollarvarAttr:public impl_unpsubterm{
public:
    enum_operators prod_sel() const
	{ return sel_UnpDollarvarAttr; }
    explicit impl_unpsubterm_UnpDollarvarAttr(INT, unpattributes);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unpsubterm rewrite( rview );
    impl_INT* INT_1;
    impl_unpattributes* unpattributes_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpsubterm_UnpSubAttr:public impl_unpsubterm{
public:
    enum_operators prod_sel() const
	{ return sel_UnpSubAttr; }
    explicit impl_unpsubterm_UnpSubAttr(ID, unpattributes);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unpsubterm rewrite( rview );
    impl_ID* ID_1;
    impl_unpattributes* unpattributes_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpsubterm_UnpDollarvarTerm:public impl_unpsubterm{
public:
    enum_operators prod_sel() const
	{ return sel_UnpDollarvarTerm; }
    explicit impl_unpsubterm_UnpDollarvarTerm(INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unpsubterm rewrite( rview );
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpsubterm_UnpSubTerm:public impl_unpsubterm{
public:
    enum_operators prod_sel() const
	{ return sel_UnpSubTerm; }
    explicit impl_unpsubterm_UnpSubTerm(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unpsubterm rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unpattributes: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunpattributes: sel_Consunpattributes;
    }
    explicit impl_unpattributes(ID = 0, unpattributes = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unpattributes concat(c_unpattributes, c_unpattributes);
    unpattributes reverse() const;
    unpattributes rewrite(rview);
    ID last() const;
    unpattributes append(ID);
    unpattributes map(ID (*)(ID));
    unpattributes filter( bool (*)(ID));
    unpattributes merge( unpattributes, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    unpattributes unpattributes_1;
private:
    impl_unpattributes* nil_rewrite(rview);
    impl_unpattributes* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_viewnameoption: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    viewnameoption rewrite(rview) =0;
};
class impl_viewnameoption_YesViewname:public impl_viewnameoption{
public:
    enum_operators prod_sel() const
	{ return sel_YesViewname; }
    explicit impl_viewnameoption_YesViewname(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    viewnameoption rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_viewnameoption_NoViewname:public impl_viewnameoption{
public:
    enum_operators prod_sel() const
	{ return sel_NoViewname; }
    explicit impl_viewnameoption_NoViewname();

    viewnameoption rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_languageoption: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    languageoption rewrite(rview) =0;
};
class impl_languageoption_LanguageList:public impl_languageoption{
public:
    enum_operators prod_sel() const
	{ return sel_LanguageList; }
    explicit impl_languageoption_LanguageList(languagenames);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    languageoption rewrite( rview );
    impl_languagenames* languagenames_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_languageoption_NoLanguagename:public impl_languageoption{
public:
    enum_operators prod_sel() const
	{ return sel_NoLanguagename; }
    explicit impl_languageoption_NoLanguagename();

    languageoption rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_languagenames: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nillanguagenames: sel_Conslanguagenames;
    }
    explicit impl_languagenames(ID = 0, languagenames = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend languagenames concat(c_languagenames, c_languagenames);
    languagenames reverse() const;
    languagenames rewrite(rview);
    ID last() const;
    languagenames append(ID);
    languagenames map(ID (*)(ID));
    languagenames filter( bool (*)(ID));
    languagenames merge( languagenames, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    languagenames languagenames_1;
private:
    impl_languagenames* nil_rewrite(rview);
    impl_languagenames* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_fileline: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    casestring file;
    int line;
    fileline rewrite(rview) =0;
};
class impl_fileline_PosNoFileLine:public impl_fileline{
public:
    enum_operators prod_sel() const
	{ return sel_PosNoFileLine; }
    explicit impl_fileline_PosNoFileLine();

    fileline rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fileline_NoFileLine:public impl_fileline{
public:
    enum_operators prod_sel() const
	{ return sel_NoFileLine; }
    explicit impl_fileline_NoFileLine();

    fileline rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_fileline_FileLine:public impl_fileline{
public:
    enum_operators prod_sel() const
	{ return sel_FileLine; }

    fileline rewrite( rview );
    impl_fileline_FileLine(casestring _file=0, int _line=0);
private:
    void do_unparse(printer_functor, uview);
};
class impl_scopetypefilelinestack: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilscopetypefilelinestack: sel_Consscopetypefilelinestack;
    }
    explicit impl_scopetypefilelinestack(scopetypefileline = 0, scopetypefilelinestack = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend scopetypefilelinestack concat(c_scopetypefilelinestack, c_scopetypefilelinestack);
    scopetypefilelinestack reverse() const;
    scopetypefilelinestack rewrite(rview);
    scopetypefileline last() const;
    scopetypefilelinestack append(scopetypefileline);
    scopetypefilelinestack map(scopetypefileline (*)(scopetypefileline));
    scopetypefilelinestack filter( bool (*)(scopetypefileline));
    scopetypefilelinestack merge( scopetypefilelinestack, scopetypefileline (*)(scopetypefileline, scopetypefileline));
    scopetypefileline reduce( scopetypefileline, scopetypefileline (*)(scopetypefileline, scopetypefileline));
    bool is_nil() const;
    scopetypefileline scopetypefileline_1;
    scopetypefilelinestack scopetypefilelinestack_1;
private:
    impl_scopetypefilelinestack* nil_rewrite(rview);
    impl_scopetypefilelinestack* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_scopetypefileline: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    scopetypefileline rewrite(rview) =0;
};
class impl_scopetypefileline_ScopeTypeFileLine:public impl_scopetypefileline{
public:
    enum_operators prod_sel() const
	{ return sel_ScopeTypeFileLine; }
    explicit impl_scopetypefileline_ScopeTypeFileLine(integer, IDtype, casestring, integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    scopetypefileline rewrite( rview );
    impl_integer* integer_1;
    impl_IDtype* IDtype_1;
    impl_casestring* casestring_1;
    impl_integer* integer_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    IDtype rewrite(rview) =0;
};
class impl_IDtype_ITLanguageName:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITLanguageName; }
    explicit impl_IDtype_ITLanguageName(integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_integer* integer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPatternVariable:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPatternVariable; }
    explicit impl_IDtype_ITPatternVariable(ID, integer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_ID* ID_1;
    impl_integer* integer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUserFunction:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUserFunction; }
    explicit impl_IDtype_ITUserFunction(fnclass);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_fnclass* fnclass_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUserRView:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUserRView; }
    explicit impl_IDtype_ITUserRView();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPredefinedRView:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPredefinedRView; }
    explicit impl_IDtype_ITPredefinedRView();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUViewVar:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUViewVar; }
    explicit impl_IDtype_ITUViewVar();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUserUView:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUserUView; }
    explicit impl_IDtype_ITUserUView();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPredefinedUView:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPredefinedUView; }
    explicit impl_IDtype_ITPredefinedUView();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITStorageClass:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITStorageClass; }
    explicit impl_IDtype_ITStorageClass();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPredefinedStorageClass:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPredefinedStorageClass; }
    explicit impl_IDtype_ITPredefinedStorageClass();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUserOperator:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUserOperator; }
    explicit impl_IDtype_ITUserOperator(alternative, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_alternative* alternative_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPredefinedOperator:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPredefinedOperator; }
    explicit impl_IDtype_ITPredefinedOperator(alternative, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_alternative* alternative_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUserPhylum:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUserPhylum; }
    explicit impl_IDtype_ITUserPhylum(phylumdeclaration);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_phylumdeclaration* phylumdeclaration_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITPredefinedPhylum:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITPredefinedPhylum; }
    explicit impl_IDtype_ITPredefinedPhylum(phylumdeclaration);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    IDtype rewrite( rview );
    impl_phylumdeclaration* phylumdeclaration_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_IDtype_ITUnknown:public impl_IDtype{
public:
    enum_operators prod_sel() const
	{ return sel_ITUnknown; }
    explicit impl_IDtype_ITUnknown();

    IDtype rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_operators: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Niloperators: sel_Consoperators;
    }
    explicit impl_operators(ID = 0, operators = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend operators concat(c_operators, c_operators);
    operators reverse() const;
    operators rewrite(rview);
    ID last() const;
    operators append(ID);
    operators map(ID (*)(ID));
    operators filter( bool (*)(ID));
    operators merge( operators, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    operators operators_1;
private:
    impl_operators* nil_rewrite(rview);
    impl_operators* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_phyla: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilphyla: sel_Consphyla;
    }
    explicit impl_phyla(ID = 0, phyla = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend phyla concat(c_phyla, c_phyla);
    phyla reverse() const;
    phyla rewrite(rview);
    ID last() const;
    phyla append(ID);
    phyla map(ID (*)(ID));
    phyla filter( bool (*)(ID));
    phyla merge( phyla, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    phyla phyla_1;
private:
    impl_phyla* nil_rewrite(rview);
    impl_phyla* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_variables: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilvariables: sel_Consvariables;
    }
    explicit impl_variables(ID = 0, variables = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend variables concat(c_variables, c_variables);
    variables reverse() const;
    variables rewrite(rview);
    ID last() const;
    variables append(ID);
    variables map(ID (*)(ID));
    variables filter( bool (*)(ID));
    variables merge( variables, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    variables variables_1;
private:
    impl_variables* nil_rewrite(rview);
    impl_variables* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_dollarvarstatus: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    dollarvarstatus rewrite(rview) =0;
};
class impl_dollarvarstatus_DVDisallowed:public impl_dollarvarstatus{
public:
    enum_operators prod_sel() const
	{ return sel_DVDisallowed; }
    explicit impl_dollarvarstatus_DVDisallowed();

    dollarvarstatus rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_dollarvarstatus_DVAllowed:public impl_dollarvarstatus{
public:
    enum_operators prod_sel() const
	{ return sel_DVAllowed; }
    explicit impl_dollarvarstatus_DVAllowed();

    dollarvarstatus rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_tribool: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    tribool rewrite(rview) =0;
};
class impl_tribool_Bigger:public impl_tribool{
public:
    enum_operators prod_sel() const
	{ return sel_Bigger; }
    explicit impl_tribool_Bigger();

    tribool rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_tribool_Smaller:public impl_tribool{
public:
    enum_operators prod_sel() const
	{ return sel_Smaller; }
    explicit impl_tribool_Smaller();

    tribool rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_tribool_Equal:public impl_tribool{
public:
    enum_operators prod_sel() const
	{ return sel_Equal; }
    explicit impl_tribool_Equal();

    tribool rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_patternrepresentations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpatternrepresentations: sel_Conspatternrepresentations;
    }
    explicit impl_patternrepresentations(patternrepresentation = 0, patternrepresentations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend patternrepresentations concat(c_patternrepresentations, c_patternrepresentations);
    patternrepresentations reverse() const;
    patternrepresentations rewrite(rview);
    patternrepresentation last() const;
    patternrepresentations append(patternrepresentation);
    patternrepresentations map(patternrepresentation (*)(patternrepresentation));
    patternrepresentations filter( bool (*)(patternrepresentation));
    patternrepresentations merge( patternrepresentations, patternrepresentation (*)(patternrepresentation, patternrepresentation));
    patternrepresentation reduce( patternrepresentation, patternrepresentation (*)(patternrepresentation, patternrepresentation));
    bool is_nil() const;
    patternrepresentation patternrepresentation_1;
    patternrepresentations patternrepresentations_1;
private:
    impl_patternrepresentations* nil_rewrite(rview);
    impl_patternrepresentations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_patternrepresentation: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpatternrepresentation: sel_Conspatternrepresentation;
    }
    explicit impl_patternrepresentation(elem_patternrepresentation = 0, patternrepresentation = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend patternrepresentation concat(c_patternrepresentation, c_patternrepresentation);
    patternrepresentation reverse() const;
    patternrepresentation rewrite(rview);
    elem_patternrepresentation last() const;
    patternrepresentation append(elem_patternrepresentation);
    patternrepresentation map(elem_patternrepresentation (*)(elem_patternrepresentation));
    patternrepresentation filter( bool (*)(elem_patternrepresentation));
    patternrepresentation merge( patternrepresentation, elem_patternrepresentation (*)(elem_patternrepresentation, elem_patternrepresentation));
    elem_patternrepresentation reduce( elem_patternrepresentation, elem_patternrepresentation (*)(elem_patternrepresentation, elem_patternrepresentation));
    bool is_nil() const;
    elem_patternrepresentation elem_patternrepresentation_1;
    patternrepresentation patternrepresentation_1;
private:
    impl_patternrepresentation* nil_rewrite(rview);
    impl_patternrepresentation* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    ID type;
    elem_patternrepresentation rewrite(rview) =0;
};
class impl_elem_patternrepresentation_PRIntLiteral:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRIntLiteral; }
    explicit impl_elem_patternrepresentation_PRIntLiteral(path, INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRStringLiteral:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRStringLiteral; }
    explicit impl_elem_patternrepresentation_PRStringLiteral(path, CexpressionDQ);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
    impl_CexpressionDQ* CexpressionDQ_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRDefault:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRDefault; }
    explicit impl_elem_patternrepresentation_PRDefault();

    elem_patternrepresentation rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRWildcard:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRWildcard; }
    explicit impl_elem_patternrepresentation_PRWildcard(path);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRNonLeafBinding:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRNonLeafBinding; }
    explicit impl_elem_patternrepresentation_PRNonLeafBinding(path, ID, patternrepresentation);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
    impl_ID* ID_1;
    impl_patternrepresentation* patternrepresentation_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRUserPredicate:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRUserPredicate; }
    explicit impl_elem_patternrepresentation_PRUserPredicate(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PROperPredicate:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PROperPredicate; }
    explicit impl_elem_patternrepresentation_PROperPredicate(path, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRVarPredicate:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRVarPredicate; }
    explicit impl_elem_patternrepresentation_PRVarPredicate(paths, ID, patternrepresentation);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_paths* paths_1;
    impl_ID* ID_1;
    impl_patternrepresentation* patternrepresentation_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_elem_patternrepresentation_PRBinding:public impl_elem_patternrepresentation{
public:
    enum_operators prod_sel() const
	{ return sel_PRBinding; }
    explicit impl_elem_patternrepresentation_PRBinding(path, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    elem_patternrepresentation rewrite( rview );
    impl_path* path_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_path: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    ID op;
    ID id;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpath: sel_Conspath;
    }
    explicit impl_path(integer = 0, path = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend path concat(c_path, c_path);
    path reverse() const;
    path rewrite(rview);
    integer last() const;
    path append(integer);
    path map(integer (*)(integer));
    path filter( bool (*)(integer));
    path merge( path, integer (*)(integer, integer));
    integer reduce( integer, integer (*)(integer, integer));
    bool is_nil() const;
    integer integer_1;
    path path_1;
private:
    impl_path* nil_rewrite(rview);
    impl_path* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_paths: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilpaths: sel_Conspaths;
    }
    explicit impl_paths(path = 0, paths = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend paths concat(c_paths, c_paths);
    paths reverse() const;
    paths rewrite(rview);
    path last() const;
    paths append(path);
    paths map(path (*)(path));
    paths filter( bool (*)(path));
    paths merge( paths, path (*)(path, path));
    path reduce( path, path (*)(path, path));
    bool is_nil() const;
    path path_1;
    paths paths_1;
private:
    impl_paths* nil_rewrite(rview);
    impl_paths* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_argsnumbers: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilargsnumbers: sel_Consargsnumbers;
    }
    explicit impl_argsnumbers(integer = 0, argsnumbers = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend argsnumbers concat(c_argsnumbers, c_argsnumbers);
    argsnumbers reverse() const;
    argsnumbers rewrite(rview);
    integer last() const;
    argsnumbers append(integer);
    argsnumbers map(integer (*)(integer));
    argsnumbers filter( bool (*)(integer));
    argsnumbers merge( argsnumbers, integer (*)(integer, integer));
    integer reduce( integer, integer (*)(integer, integer));
    bool is_nil() const;
    integer integer_1;
    argsnumbers argsnumbers_1;
private:
    impl_argsnumbers* nil_rewrite(rview);
    impl_argsnumbers* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_rewriterulesinfo: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilrewriterulesinfo: sel_Consrewriterulesinfo;
    }
    explicit impl_rewriterulesinfo(rewriteruleinfo = 0, rewriterulesinfo = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend rewriterulesinfo concat(c_rewriterulesinfo, c_rewriterulesinfo);
    rewriterulesinfo reverse() const;
    rewriterulesinfo rewrite(rview);
    rewriteruleinfo last() const;
    rewriterulesinfo append(rewriteruleinfo);
    rewriterulesinfo map(rewriteruleinfo (*)(rewriteruleinfo));
    rewriterulesinfo filter( bool (*)(rewriteruleinfo));
    rewriterulesinfo merge( rewriterulesinfo, rewriteruleinfo (*)(rewriteruleinfo, rewriteruleinfo));
    rewriteruleinfo reduce( rewriteruleinfo, rewriteruleinfo (*)(rewriteruleinfo, rewriteruleinfo));
    bool is_nil() const;
    rewriteruleinfo rewriteruleinfo_1;
    rewriterulesinfo rewriterulesinfo_1;
private:
    impl_rewriterulesinfo* nil_rewrite(rview);
    impl_rewriterulesinfo* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_rewriteruleinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    rewriteruleinfo rewrite(rview) =0;
};
class impl_rewriteruleinfo_Rewriteruleinfo:public impl_rewriteruleinfo{
public:
    enum_operators prod_sel() const
	{ return sel_Rewriteruleinfo; }
    explicit impl_rewriteruleinfo_Rewriteruleinfo(patternrepresentation, patternrepresentation, rewriteclause);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    rewriteruleinfo rewrite( rview );
    impl_patternrepresentation* patternrepresentation_1;
    impl_patternrepresentation* patternrepresentation_2;
    impl_rewriteclause* rewriteclause_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_withcasesinfo: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilwithcasesinfo: sel_Conswithcasesinfo;
    }
    explicit impl_withcasesinfo(withcaseinfo = 0, withcasesinfo = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend withcasesinfo concat(c_withcasesinfo, c_withcasesinfo);
    withcasesinfo reverse() const;
    withcasesinfo rewrite(rview);
    withcaseinfo last() const;
    withcasesinfo append(withcaseinfo);
    withcasesinfo map(withcaseinfo (*)(withcaseinfo));
    withcasesinfo filter( bool (*)(withcaseinfo));
    withcasesinfo merge( withcasesinfo, withcaseinfo (*)(withcaseinfo, withcaseinfo));
    withcaseinfo reduce( withcaseinfo, withcaseinfo (*)(withcaseinfo, withcaseinfo));
    bool is_nil() const;
    withcaseinfo withcaseinfo_1;
    withcasesinfo withcasesinfo_1;
private:
    impl_withcasesinfo* nil_rewrite(rview);
    impl_withcasesinfo* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_withcaseinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    withcaseinfo rewrite(rview) =0;
};
class impl_withcaseinfo_Withcaseinfo:public impl_withcaseinfo{
public:
    enum_operators prod_sel() const
	{ return sel_Withcaseinfo; }
    explicit impl_withcaseinfo_Withcaseinfo(patternrepresentation, patternrepresentation, Ctext);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    withcaseinfo rewrite( rview );
    impl_patternrepresentation* patternrepresentation_1;
    impl_patternrepresentation* patternrepresentation_2;
    impl_Ctext* Ctext_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_rewriteviewsinfo: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilrewriteviewsinfo: sel_Consrewriteviewsinfo;
    }
    explicit impl_rewriteviewsinfo(rewriteviewinfo = 0, rewriteviewsinfo = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend rewriteviewsinfo concat(c_rewriteviewsinfo, c_rewriteviewsinfo);
    rewriteviewsinfo reverse() const;
    rewriteviewsinfo rewrite(rview);
    rewriteviewinfo last() const;
    rewriteviewsinfo append(rewriteviewinfo);
    rewriteviewsinfo map(rewriteviewinfo (*)(rewriteviewinfo));
    rewriteviewsinfo filter( bool (*)(rewriteviewinfo));
    rewriteviewsinfo merge( rewriteviewsinfo, rewriteviewinfo (*)(rewriteviewinfo, rewriteviewinfo));
    rewriteviewinfo reduce( rewriteviewinfo, rewriteviewinfo (*)(rewriteviewinfo, rewriteviewinfo));
    bool is_nil() const;
    rewriteviewinfo rewriteviewinfo_1;
    rewriteviewsinfo rewriteviewsinfo_1;
private:
    impl_rewriteviewsinfo* nil_rewrite(rview);
    impl_rewriteviewsinfo* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_rewriteviewinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    rewriteviewinfo rewrite(rview) =0;
};
class impl_rewriteviewinfo_Rewriteviewinfo:public impl_rewriteviewinfo{
public:
    enum_operators prod_sel() const
	{ return sel_Rewriteviewinfo; }
    explicit impl_rewriteviewinfo_Rewriteviewinfo(ID, rewriterulesinfo);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    rewriteviewinfo rewrite( rview );
    impl_ID* ID_1;
    impl_rewriterulesinfo* rewriterulesinfo_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparseviewsinfo: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunparseviewsinfo: sel_Consunparseviewsinfo;
    }
    explicit impl_unparseviewsinfo(unparseviewinfo = 0, unparseviewsinfo = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unparseviewsinfo concat(c_unparseviewsinfo, c_unparseviewsinfo);
    unparseviewsinfo reverse() const;
    unparseviewsinfo rewrite(rview);
    unparseviewinfo last() const;
    unparseviewsinfo append(unparseviewinfo);
    unparseviewsinfo map(unparseviewinfo (*)(unparseviewinfo));
    unparseviewsinfo filter( bool (*)(unparseviewinfo));
    unparseviewsinfo merge( unparseviewsinfo, unparseviewinfo (*)(unparseviewinfo, unparseviewinfo));
    unparseviewinfo reduce( unparseviewinfo, unparseviewinfo (*)(unparseviewinfo, unparseviewinfo));
    bool is_nil() const;
    unparseviewinfo unparseviewinfo_1;
    unparseviewsinfo unparseviewsinfo_1;
private:
    impl_unparseviewsinfo* nil_rewrite(rview);
    impl_unparseviewsinfo* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparseviewinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    unparseviewinfo rewrite(rview) =0;
};
class impl_unparseviewinfo_Unparseviewinfo:public impl_unparseviewinfo{
public:
    enum_operators prod_sel() const
	{ return sel_Unparseviewinfo; }
    explicit impl_unparseviewinfo_Unparseviewinfo(ID, unparsedeclsinfo);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparseviewinfo rewrite( rview );
    impl_ID* ID_1;
    impl_unparsedeclsinfo* unparsedeclsinfo_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_unparsedeclsinfo: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilunparsedeclsinfo: sel_Consunparsedeclsinfo;
    }
    explicit impl_unparsedeclsinfo(unparsedeclinfo = 0, unparsedeclsinfo = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend unparsedeclsinfo concat(c_unparsedeclsinfo, c_unparsedeclsinfo);
    unparsedeclsinfo reverse() const;
    unparsedeclsinfo rewrite(rview);
    unparsedeclinfo last() const;
    unparsedeclsinfo append(unparsedeclinfo);
    unparsedeclsinfo map(unparsedeclinfo (*)(unparsedeclinfo));
    unparsedeclsinfo filter( bool (*)(unparsedeclinfo));
    unparsedeclsinfo merge( unparsedeclsinfo, unparsedeclinfo (*)(unparsedeclinfo, unparsedeclinfo));
    unparsedeclinfo reduce( unparsedeclinfo, unparsedeclinfo (*)(unparsedeclinfo, unparsedeclinfo));
    bool is_nil() const;
    unparsedeclinfo unparsedeclinfo_1;
    unparsedeclsinfo unparsedeclsinfo_1;
private:
    impl_unparsedeclsinfo* nil_rewrite(rview);
    impl_unparsedeclsinfo* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_unparsedeclinfo: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    unparsedeclinfo rewrite(rview) =0;
};
class impl_unparsedeclinfo_Unparsedeclinfo:public impl_unparsedeclinfo{
public:
    enum_operators prod_sel() const
	{ return sel_Unparsedeclinfo; }
    explicit impl_unparsedeclinfo_Unparsedeclinfo(patternrepresentation, patternrepresentation, unparseclause);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    unparsedeclinfo rewrite( rview );
    impl_patternrepresentation* patternrepresentation_1;
    impl_patternrepresentation* patternrepresentation_2;
    impl_unparseclause* unparseclause_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_declaration rewrite(rview) =0;
};
class impl_ac_declaration_AcDeclaration:public impl_ac_declaration{
public:
    enum_operators prod_sel() const
	{ return sel_AcDeclaration; }
    explicit impl_ac_declaration_AcDeclaration(ac_declaration_specifiers, ac_init_declarator_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_declaration rewrite( rview );
    impl_ac_declaration_specifiers* ac_declaration_specifiers_1;
    impl_ac_init_declarator_list* ac_init_declarator_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_declaration_list: sel_Consac_declaration_list;
    }
    explicit impl_ac_declaration_list(ac_declaration = 0, ac_declaration_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_declaration_list concat(c_ac_declaration_list, c_ac_declaration_list);
    ac_declaration_list reverse() const;
    ac_declaration_list rewrite(rview);
    ac_declaration last() const;
    ac_declaration_list append(ac_declaration);
    ac_declaration_list map(ac_declaration (*)(ac_declaration));
    ac_declaration_list filter( bool (*)(ac_declaration));
    ac_declaration_list merge( ac_declaration_list, ac_declaration (*)(ac_declaration, ac_declaration));
    ac_declaration reduce( ac_declaration, ac_declaration (*)(ac_declaration, ac_declaration));
    bool is_nil() const;
    ac_declaration ac_declaration_1;
    ac_declaration_list ac_declaration_list_1;
private:
    impl_ac_declaration_list* nil_rewrite(rview);
    impl_ac_declaration_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration_specifiers: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_declaration_specifiers: sel_Consac_declaration_specifiers;
    }
    explicit impl_ac_declaration_specifiers(ac_declaration_specifier = 0, ac_declaration_specifiers = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_declaration_specifiers concat(c_ac_declaration_specifiers, c_ac_declaration_specifiers);
    ac_declaration_specifiers reverse() const;
    ac_declaration_specifiers rewrite(rview);
    ac_declaration_specifier last() const;
    ac_declaration_specifiers append(ac_declaration_specifier);
    ac_declaration_specifiers map(ac_declaration_specifier (*)(ac_declaration_specifier));
    ac_declaration_specifiers filter( bool (*)(ac_declaration_specifier));
    ac_declaration_specifiers merge( ac_declaration_specifiers, ac_declaration_specifier (*)(ac_declaration_specifier, ac_declaration_specifier));
    ac_declaration_specifier reduce( ac_declaration_specifier, ac_declaration_specifier (*)(ac_declaration_specifier, ac_declaration_specifier));
    bool is_nil() const;
    ac_declaration_specifier ac_declaration_specifier_1;
    ac_declaration_specifiers ac_declaration_specifiers_1;
private:
    impl_ac_declaration_specifiers* nil_rewrite(rview);
    impl_ac_declaration_specifiers* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration_specifier: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_declaration_specifier rewrite(rview) =0;
};
class impl_ac_declaration_specifier_AcDeclSpecTypeQual:public impl_ac_declaration_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcDeclSpecTypeQual; }
    explicit impl_ac_declaration_specifier_AcDeclSpecTypeQual(ac_type_qualifier);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_declaration_specifier rewrite( rview );
    impl_ac_type_qualifier* ac_type_qualifier_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration_specifier_AcDeclSpecTypeSpec:public impl_ac_declaration_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcDeclSpecTypeSpec; }
    explicit impl_ac_declaration_specifier_AcDeclSpecTypeSpec(ac_type_specifier);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_declaration_specifier rewrite( rview );
    impl_ac_type_specifier* ac_type_specifier_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_declaration_specifier_AcDeclSpecStorageSpec:public impl_ac_declaration_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcDeclSpecStorageSpec; }
    explicit impl_ac_declaration_specifier_AcDeclSpecStorageSpec(ac_storage_class_specifier);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_declaration_specifier rewrite( rview );
    impl_ac_storage_class_specifier* ac_storage_class_specifier_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_storage_class_specifier rewrite(rview) =0;
};
class impl_ac_storage_class_specifier_AcVirtual:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcVirtual; }
    explicit impl_ac_storage_class_specifier_AcVirtual();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier_AcTypedef:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcTypedef; }
    explicit impl_ac_storage_class_specifier_AcTypedef();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier_AcExtern:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcExtern; }
    explicit impl_ac_storage_class_specifier_AcExtern();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier_AcStatic:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcStatic; }
    explicit impl_ac_storage_class_specifier_AcStatic();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier_AcRegister:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcRegister; }
    explicit impl_ac_storage_class_specifier_AcRegister();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_storage_class_specifier_AcAuto:public impl_ac_storage_class_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcAuto; }
    explicit impl_ac_storage_class_specifier_AcAuto();

    ac_storage_class_specifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_specifier: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_type_specifier rewrite(rview) =0;
};
class impl_ac_type_specifier_AcTypeSpec:public impl_ac_type_specifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcTypeSpec; }
    explicit impl_ac_type_specifier_AcTypeSpec(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_type_specifier rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_qualifier: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_type_qualifier rewrite(rview) =0;
};
class impl_ac_type_qualifier_AcNoQualifier:public impl_ac_type_qualifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcNoQualifier; }
    explicit impl_ac_type_qualifier_AcNoQualifier();

    ac_type_qualifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_qualifier_AcUnsigned:public impl_ac_type_qualifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcUnsigned; }
    explicit impl_ac_type_qualifier_AcUnsigned();

    ac_type_qualifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_qualifier_AcVolatile:public impl_ac_type_qualifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcVolatile; }
    explicit impl_ac_type_qualifier_AcVolatile();

    ac_type_qualifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_qualifier_AcConst:public impl_ac_type_qualifier{
public:
    enum_operators prod_sel() const
	{ return sel_AcConst; }
    explicit impl_ac_type_qualifier_AcConst();

    ac_type_qualifier rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_init_declarator_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_init_declarator_list: sel_Consac_init_declarator_list;
    }
    explicit impl_ac_init_declarator_list(ac_init_declarator = 0, ac_init_declarator_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_init_declarator_list concat(c_ac_init_declarator_list, c_ac_init_declarator_list);
    ac_init_declarator_list reverse() const;
    ac_init_declarator_list rewrite(rview);
    ac_init_declarator last() const;
    ac_init_declarator_list append(ac_init_declarator);
    ac_init_declarator_list map(ac_init_declarator (*)(ac_init_declarator));
    ac_init_declarator_list filter( bool (*)(ac_init_declarator));
    ac_init_declarator_list merge( ac_init_declarator_list, ac_init_declarator (*)(ac_init_declarator, ac_init_declarator));
    ac_init_declarator reduce( ac_init_declarator, ac_init_declarator (*)(ac_init_declarator, ac_init_declarator));
    bool is_nil() const;
    ac_init_declarator ac_init_declarator_1;
    ac_init_declarator_list ac_init_declarator_list_1;
private:
    impl_ac_init_declarator_list* nil_rewrite(rview);
    impl_ac_init_declarator_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_init_declarator: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_init_declarator rewrite(rview) =0;
};
class impl_ac_init_declarator_AcInitDecl:public impl_ac_init_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcInitDecl; }
    explicit impl_ac_init_declarator_AcInitDecl(ac_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_init_declarator rewrite( rview );
    impl_ac_declarator* ac_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_declarator: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_declarator rewrite(rview) =0;
};
class impl_ac_declarator_AcDeclarator:public impl_ac_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDeclarator; }
    explicit impl_ac_declarator_AcDeclarator(ac_pointer_option, ac_ref_option, ac_direct_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_declarator rewrite( rview );
    impl_ac_pointer_option* ac_pointer_option_1;
    impl_ac_ref_option* ac_ref_option_1;
    impl_ac_direct_declarator* ac_direct_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_direct_declarator rewrite(rview) =0;
};
class impl_ac_direct_declarator_AcOperatorDeclId:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcOperatorDeclId; }
    explicit impl_ac_direct_declarator_AcOperatorDeclId(ac_operator_name);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ac_operator_name* ac_operator_name_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcConvOperatorDecl:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcConvOperatorDecl; }
    explicit impl_ac_direct_declarator_AcConvOperatorDecl(ID, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ID* ID_1;
    impl_ID* ID_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcMemberDecl:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcMemberDecl; }
    explicit impl_ac_direct_declarator_AcMemberDecl(ID, ID, ac_constant_expression_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ID* ID_1;
    impl_ID* ID_2;
    impl_ac_constant_expression_list* ac_constant_expression_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcQualifiedDeclProto:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcQualifiedDeclProto; }
    explicit impl_ac_direct_declarator_AcQualifiedDeclProto(ac_class_qualifier_list, ac_direct_declarator, ac_parameter_type_list, ac_type_qualifier);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ac_class_qualifier_list* ac_class_qualifier_list_1;
    impl_ac_direct_declarator* ac_direct_declarator_1;
    impl_ac_parameter_type_list* ac_parameter_type_list_1;
    impl_ac_type_qualifier* ac_type_qualifier_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcDirectDeclProto:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirectDeclProto; }
    explicit impl_ac_direct_declarator_AcDirectDeclProto(ac_direct_declarator, ac_parameter_type_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ac_direct_declarator* ac_direct_declarator_1;
    impl_ac_parameter_type_list* ac_parameter_type_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcDirectDeclArray:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirectDeclArray; }
    explicit impl_ac_direct_declarator_AcDirectDeclArray(ac_direct_declarator, ac_constant_expression_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ac_direct_declarator* ac_direct_declarator_1;
    impl_ac_constant_expression_option* ac_constant_expression_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcDirectDeclPack:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirectDeclPack; }
    explicit impl_ac_direct_declarator_AcDirectDeclPack(ac_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ac_declarator* ac_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_declarator_AcDirectDeclId:public impl_ac_direct_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirectDeclId; }
    explicit impl_ac_direct_declarator_AcDirectDeclId(ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_declarator rewrite( rview );
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_pointer_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_pointer_option rewrite(rview) =0;
};
class impl_ac_pointer_option_Yespointer:public impl_ac_pointer_option{
public:
    enum_operators prod_sel() const
	{ return sel_Yespointer; }
    explicit impl_ac_pointer_option_Yespointer(ac_pointer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_pointer_option rewrite( rview );
    impl_ac_pointer* ac_pointer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_pointer_option_Nopointer:public impl_ac_pointer_option{
public:
    enum_operators prod_sel() const
	{ return sel_Nopointer; }
    explicit impl_ac_pointer_option_Nopointer();

    ac_pointer_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_pointer: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_pointer rewrite(rview) =0;
};
class impl_ac_pointer_AcPointerCons:public impl_ac_pointer{
public:
    enum_operators prod_sel() const
	{ return sel_AcPointerCons; }
    explicit impl_ac_pointer_AcPointerCons(ac_type_qualifier_list, ac_pointer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_pointer rewrite( rview );
    impl_ac_type_qualifier_list* ac_type_qualifier_list_1;
    impl_ac_pointer* ac_pointer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_pointer_AcPointerNil:public impl_ac_pointer{
public:
    enum_operators prod_sel() const
	{ return sel_AcPointerNil; }
    explicit impl_ac_pointer_AcPointerNil(ac_type_qualifier_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_pointer rewrite( rview );
    impl_ac_type_qualifier_list* ac_type_qualifier_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_ref_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_ref_option rewrite(rview) =0;
};
class impl_ac_ref_option_AcRef:public impl_ac_ref_option{
public:
    enum_operators prod_sel() const
	{ return sel_AcRef; }
    explicit impl_ac_ref_option_AcRef();

    ac_ref_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_ref_option_AcNoRef:public impl_ac_ref_option{
public:
    enum_operators prod_sel() const
	{ return sel_AcNoRef; }
    explicit impl_ac_ref_option_AcNoRef();

    ac_ref_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_operator_name: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int line;
    casestring file;
    ac_operator_name rewrite(rview) =0;
};
class impl_ac_operator_name_AcOperatorName:public impl_ac_operator_name{
public:
    enum_operators prod_sel() const
	{ return sel_AcOperatorName; }
    explicit impl_ac_operator_name_AcOperatorName(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_operator_name rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_class_qualifier_help_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_class_qualifier_help_list: sel_Consac_class_qualifier_help_list;
    }
    explicit impl_ac_class_qualifier_help_list(ac_direct_declarator = 0, ac_class_qualifier_help_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_class_qualifier_help_list concat(c_ac_class_qualifier_help_list, c_ac_class_qualifier_help_list);
    ac_class_qualifier_help_list reverse() const;
    ac_class_qualifier_help_list rewrite(rview);
    ac_direct_declarator last() const;
    ac_class_qualifier_help_list append(ac_direct_declarator);
    ac_class_qualifier_help_list map(ac_direct_declarator (*)(ac_direct_declarator));
    ac_class_qualifier_help_list filter( bool (*)(ac_direct_declarator));
    ac_class_qualifier_help_list merge( ac_class_qualifier_help_list, ac_direct_declarator (*)(ac_direct_declarator, ac_direct_declarator));
    ac_direct_declarator reduce( ac_direct_declarator, ac_direct_declarator (*)(ac_direct_declarator, ac_direct_declarator));
    bool is_nil() const;
    ac_direct_declarator ac_direct_declarator_1;
    ac_class_qualifier_help_list ac_class_qualifier_help_list_1;
private:
    impl_ac_class_qualifier_help_list* nil_rewrite(rview);
    impl_ac_class_qualifier_help_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_class_qualifier_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_class_qualifier_list: sel_Consac_class_qualifier_list;
    }
    explicit impl_ac_class_qualifier_list(ID = 0, ac_class_qualifier_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_class_qualifier_list concat(c_ac_class_qualifier_list, c_ac_class_qualifier_list);
    ac_class_qualifier_list reverse() const;
    ac_class_qualifier_list rewrite(rview);
    ID last() const;
    ac_class_qualifier_list append(ID);
    ac_class_qualifier_list map(ID (*)(ID));
    ac_class_qualifier_list filter( bool (*)(ID));
    ac_class_qualifier_list merge( ac_class_qualifier_list, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    ac_class_qualifier_list ac_class_qualifier_list_1;
private:
    impl_ac_class_qualifier_list* nil_rewrite(rview);
    impl_ac_class_qualifier_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_type_qualifier_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_type_qualifier_list: sel_Consac_type_qualifier_list;
    }
    explicit impl_ac_type_qualifier_list(ac_type_qualifier = 0, ac_type_qualifier_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_type_qualifier_list concat(c_ac_type_qualifier_list, c_ac_type_qualifier_list);
    ac_type_qualifier_list reverse() const;
    ac_type_qualifier_list rewrite(rview);
    ac_type_qualifier last() const;
    ac_type_qualifier_list append(ac_type_qualifier);
    ac_type_qualifier_list map(ac_type_qualifier (*)(ac_type_qualifier));
    ac_type_qualifier_list filter( bool (*)(ac_type_qualifier));
    ac_type_qualifier_list merge( ac_type_qualifier_list, ac_type_qualifier (*)(ac_type_qualifier, ac_type_qualifier));
    ac_type_qualifier reduce( ac_type_qualifier, ac_type_qualifier (*)(ac_type_qualifier, ac_type_qualifier));
    bool is_nil() const;
    ac_type_qualifier ac_type_qualifier_1;
    ac_type_qualifier_list ac_type_qualifier_list_1;
private:
    impl_ac_type_qualifier_list* nil_rewrite(rview);
    impl_ac_type_qualifier_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_parameter_type_list: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_parameter_type_list rewrite(rview) =0;
};
class impl_ac_parameter_type_list_AcParList3Dot:public impl_ac_parameter_type_list{
public:
    enum_operators prod_sel() const
	{ return sel_AcParList3Dot; }
    explicit impl_ac_parameter_type_list_AcParList3Dot(ac_parameter_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_parameter_type_list rewrite( rview );
    impl_ac_parameter_list* ac_parameter_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_parameter_type_list_AcParList:public impl_ac_parameter_type_list{
public:
    enum_operators prod_sel() const
	{ return sel_AcParList; }
    explicit impl_ac_parameter_type_list_AcParList(ac_parameter_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_parameter_type_list rewrite( rview );
    impl_ac_parameter_list* ac_parameter_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_parameter_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_parameter_list: sel_Consac_parameter_list;
    }
    explicit impl_ac_parameter_list(ac_parameter_declaration = 0, ac_parameter_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_parameter_list concat(c_ac_parameter_list, c_ac_parameter_list);
    ac_parameter_list reverse() const;
    ac_parameter_list rewrite(rview);
    ac_parameter_declaration last() const;
    ac_parameter_list append(ac_parameter_declaration);
    ac_parameter_list map(ac_parameter_declaration (*)(ac_parameter_declaration));
    ac_parameter_list filter( bool (*)(ac_parameter_declaration));
    ac_parameter_list merge( ac_parameter_list, ac_parameter_declaration (*)(ac_parameter_declaration, ac_parameter_declaration));
    ac_parameter_declaration reduce( ac_parameter_declaration, ac_parameter_declaration (*)(ac_parameter_declaration, ac_parameter_declaration));
    bool is_nil() const;
    ac_parameter_declaration ac_parameter_declaration_1;
    ac_parameter_list ac_parameter_list_1;
private:
    impl_ac_parameter_list* nil_rewrite(rview);
    impl_ac_parameter_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_parameter_declaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_parameter_declaration rewrite(rview) =0;
};
class impl_ac_parameter_declaration_AcParDeclAbsdecl:public impl_ac_parameter_declaration{
public:
    enum_operators prod_sel() const
	{ return sel_AcParDeclAbsdecl; }
    explicit impl_ac_parameter_declaration_AcParDeclAbsdecl(ac_declaration_specifiers, ac_abstract_declarator, ac_constant_expression_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_parameter_declaration rewrite( rview );
    impl_ac_declaration_specifiers* ac_declaration_specifiers_1;
    impl_ac_abstract_declarator* ac_abstract_declarator_1;
    impl_ac_constant_expression_option* ac_constant_expression_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_parameter_declaration_AcParDeclDecl:public impl_ac_parameter_declaration{
public:
    enum_operators prod_sel() const
	{ return sel_AcParDeclDecl; }
    explicit impl_ac_parameter_declaration_AcParDeclDecl(ac_declaration_specifiers, ac_declarator, ac_constant_expression_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_parameter_declaration rewrite( rview );
    impl_ac_declaration_specifiers* ac_declaration_specifiers_1;
    impl_ac_declarator* ac_declarator_1;
    impl_ac_constant_expression_option* ac_constant_expression_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_identifier_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_identifier_list: sel_Consac_identifier_list;
    }
    explicit impl_ac_identifier_list(ID = 0, ac_identifier_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_identifier_list concat(c_ac_identifier_list, c_ac_identifier_list);
    ac_identifier_list reverse() const;
    ac_identifier_list rewrite(rview);
    ID last() const;
    ac_identifier_list append(ID);
    ac_identifier_list map(ID (*)(ID));
    ac_identifier_list filter( bool (*)(ID));
    ac_identifier_list merge( ac_identifier_list, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    ac_identifier_list ac_identifier_list_1;
private:
    impl_ac_identifier_list* nil_rewrite(rview);
    impl_ac_identifier_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_abstract_declarator: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_abstract_declarator rewrite(rview) =0;
};
class impl_ac_abstract_declarator_AcAbsdeclDirdecl:public impl_ac_abstract_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcAbsdeclDirdecl; }
    explicit impl_ac_abstract_declarator_AcAbsdeclDirdecl(ac_pointer_option, ac_direct_abstract_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_abstract_declarator rewrite( rview );
    impl_ac_pointer_option* ac_pointer_option_1;
    impl_ac_direct_abstract_declarator* ac_direct_abstract_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_abstract_declarator_AcAbsdeclPointer:public impl_ac_abstract_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcAbsdeclPointer; }
    explicit impl_ac_abstract_declarator_AcAbsdeclPointer(ac_pointer);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_abstract_declarator rewrite( rview );
    impl_ac_pointer* ac_pointer_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_abstract_declarator_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_direct_abstract_declarator_option rewrite(rview) =0;
};
class impl_ac_direct_abstract_declarator_option_Yesac_direct_abstract_declarator:public impl_ac_direct_abstract_declarator_option{
public:
    enum_operators prod_sel() const
	{ return sel_Yesac_direct_abstract_declarator; }
    explicit impl_ac_direct_abstract_declarator_option_Yesac_direct_abstract_declarator(ac_direct_abstract_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_abstract_declarator_option rewrite( rview );
    impl_ac_direct_abstract_declarator* ac_direct_abstract_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_abstract_declarator_option_Noac_direct_abstract_declarator:public impl_ac_direct_abstract_declarator_option{
public:
    enum_operators prod_sel() const
	{ return sel_Noac_direct_abstract_declarator; }
    explicit impl_ac_direct_abstract_declarator_option_Noac_direct_abstract_declarator();

    ac_direct_abstract_declarator_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_abstract_declarator: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_direct_abstract_declarator rewrite(rview) =0;
};
class impl_ac_direct_abstract_declarator_AcDirAbsdeclFn:public impl_ac_direct_abstract_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirAbsdeclFn; }
    explicit impl_ac_direct_abstract_declarator_AcDirAbsdeclFn(ac_direct_abstract_declarator_option, ac_parameter_type_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_abstract_declarator rewrite( rview );
    impl_ac_direct_abstract_declarator_option* ac_direct_abstract_declarator_option_1;
    impl_ac_parameter_type_list* ac_parameter_type_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_abstract_declarator_AcDirAbsdeclArray:public impl_ac_direct_abstract_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirAbsdeclArray; }
    explicit impl_ac_direct_abstract_declarator_AcDirAbsdeclArray(ac_direct_abstract_declarator_option, ac_constant_expression_option);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_abstract_declarator rewrite( rview );
    impl_ac_direct_abstract_declarator_option* ac_direct_abstract_declarator_option_1;
    impl_ac_constant_expression_option* ac_constant_expression_option_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_direct_abstract_declarator_AcDirAbsdeclPack:public impl_ac_direct_abstract_declarator{
public:
    enum_operators prod_sel() const
	{ return sel_AcDirAbsdeclPack; }
    explicit impl_ac_direct_abstract_declarator_AcDirAbsdeclPack(ac_abstract_declarator);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_direct_abstract_declarator rewrite( rview );
    impl_ac_abstract_declarator* ac_abstract_declarator_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_constant_expression_option: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_constant_expression_option rewrite(rview) =0;
};
class impl_ac_constant_expression_option_Noac_constant_expression:public impl_ac_constant_expression_option{
public:
    enum_operators prod_sel() const
	{ return sel_Noac_constant_expression; }
    explicit impl_ac_constant_expression_option_Noac_constant_expression();

    ac_constant_expression_option rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_constant_expression_option_Yesac_constant_expression:public impl_ac_constant_expression_option{
public:
    enum_operators prod_sel() const
	{ return sel_Yesac_constant_expression; }
    explicit impl_ac_constant_expression_option_Yesac_constant_expression(ac_constant_expression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_constant_expression_option rewrite( rview );
    impl_ac_constant_expression* ac_constant_expression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_constant_expression: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_constant_expression rewrite(rview) =0;
};
class impl_ac_constant_expression_AcConstExpr:public impl_ac_constant_expression{
public:
    enum_operators prod_sel() const
	{ return sel_AcConstExpr; }
    explicit impl_ac_constant_expression_AcConstExpr(Cexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_constant_expression rewrite( rview );
    impl_Cexpression* Cexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_constant_expression_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_constant_expression_list: sel_Consac_constant_expression_list;
    }
    explicit impl_ac_constant_expression_list(ac_constant_expression = 0, ac_constant_expression_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_constant_expression_list concat(c_ac_constant_expression_list, c_ac_constant_expression_list);
    ac_constant_expression_list reverse() const;
    ac_constant_expression_list rewrite(rview);
    ac_constant_expression last() const;
    ac_constant_expression_list append(ac_constant_expression);
    ac_constant_expression_list map(ac_constant_expression (*)(ac_constant_expression));
    ac_constant_expression_list filter( bool (*)(ac_constant_expression));
    ac_constant_expression_list merge( ac_constant_expression_list, ac_constant_expression (*)(ac_constant_expression, ac_constant_expression));
    ac_constant_expression reduce( ac_constant_expression, ac_constant_expression (*)(ac_constant_expression, ac_constant_expression));
    bool is_nil() const;
    ac_constant_expression ac_constant_expression_1;
    ac_constant_expression_list ac_constant_expression_list_1;
private:
    impl_ac_constant_expression_list* nil_rewrite(rview);
    impl_ac_constant_expression_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_opt_base_init_list: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_opt_base_init_list rewrite(rview) =0;
};
class impl_ac_opt_base_init_list_AcYesBaseInit:public impl_ac_opt_base_init_list{
public:
    enum_operators prod_sel() const
	{ return sel_AcYesBaseInit; }
    explicit impl_ac_opt_base_init_list_AcYesBaseInit(ac_base_init_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_opt_base_init_list rewrite( rview );
    impl_ac_base_init_list* ac_base_init_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_opt_base_init_list_AcNoBaseInit:public impl_ac_opt_base_init_list{
public:
    enum_operators prod_sel() const
	{ return sel_AcNoBaseInit; }
    explicit impl_ac_opt_base_init_list_AcNoBaseInit();

    ac_opt_base_init_list rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_ac_base_init_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilac_base_init_list: sel_Consac_base_init_list;
    }
    explicit impl_ac_base_init_list(ac_base_init = 0, ac_base_init_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend ac_base_init_list concat(c_ac_base_init_list, c_ac_base_init_list);
    ac_base_init_list reverse() const;
    ac_base_init_list rewrite(rview);
    ac_base_init last() const;
    ac_base_init_list append(ac_base_init);
    ac_base_init_list map(ac_base_init (*)(ac_base_init));
    ac_base_init_list filter( bool (*)(ac_base_init));
    ac_base_init_list merge( ac_base_init_list, ac_base_init (*)(ac_base_init, ac_base_init));
    ac_base_init reduce( ac_base_init, ac_base_init (*)(ac_base_init, ac_base_init));
    bool is_nil() const;
    ac_base_init ac_base_init_1;
    ac_base_init_list ac_base_init_list_1;
private:
    impl_ac_base_init_list* nil_rewrite(rview);
    impl_ac_base_init_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_ac_base_init: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    ac_base_init rewrite(rview) =0;
};
class impl_ac_base_init_AcBaseInit:public impl_ac_base_init{
public:
    enum_operators prod_sel() const
	{ return sel_AcBaseInit; }
    explicit impl_ac_base_init_AcBaseInit(ID, ac_constant_expression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    ac_base_init rewrite( rview );
    impl_ID* ID_1;
    impl_ac_constant_expression* ac_constant_expression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_baseclass_declarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilbaseclass_declarations: sel_Consbaseclass_declarations;
    }
    explicit impl_baseclass_declarations(baseclass_decl = 0, baseclass_declarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend baseclass_declarations concat(c_baseclass_declarations, c_baseclass_declarations);
    baseclass_declarations reverse() const;
    baseclass_declarations rewrite(rview);
    baseclass_decl last() const;
    baseclass_declarations append(baseclass_decl);
    baseclass_declarations map(baseclass_decl (*)(baseclass_decl));
    baseclass_declarations filter( bool (*)(baseclass_decl));
    baseclass_declarations merge( baseclass_declarations, baseclass_decl (*)(baseclass_decl, baseclass_decl));
    baseclass_decl reduce( baseclass_decl, baseclass_decl (*)(baseclass_decl, baseclass_decl));
    bool is_nil() const;
    baseclass_decl baseclass_decl_1;
    baseclass_declarations baseclass_declarations_1;
private:
    impl_baseclass_declarations* nil_rewrite(rview);
    impl_baseclass_declarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_baseclass_decl: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    baseclass_decl rewrite(rview) =0;
};
class impl_baseclass_decl_BaseClassDecl:public impl_baseclass_decl{
public:
    enum_operators prod_sel() const
	{ return sel_BaseClassDecl; }
    explicit impl_baseclass_decl_BaseClassDecl(ID, baseclass_list);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    baseclass_decl rewrite( rview );
    impl_ID* ID_1;
    impl_baseclass_list* baseclass_list_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_baseclass_list: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilbaseclass_list: sel_Consbaseclass_list;
    }
    explicit impl_baseclass_list(ID = 0, baseclass_list = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend baseclass_list concat(c_baseclass_list, c_baseclass_list);
    baseclass_list reverse() const;
    baseclass_list rewrite(rview);
    ID last() const;
    baseclass_list append(ID);
    baseclass_list map(ID (*)(ID));
    baseclass_list filter( bool (*)(ID));
    baseclass_list merge( baseclass_list, ID (*)(ID, ID));
    ID reduce( ID, ID (*)(ID, ID));
    bool is_nil() const;
    ID ID_1;
    baseclass_list baseclass_list_1;
private:
    impl_baseclass_list* nil_rewrite(rview);
    impl_baseclass_list* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_error: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    error rewrite(rview) =0;
};
class impl_error_Warning:public impl_error{
public:
    enum_operators prod_sel() const
	{ return sel_Warning; }
    explicit impl_error_Warning(fileline, problem);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    error rewrite( rview );
    impl_fileline* fileline_1;
    impl_problem* problem_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_error_NonFatal:public impl_error{
public:
    enum_operators prod_sel() const
	{ return sel_NonFatal; }
    explicit impl_error_NonFatal(fileline, problem);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    error rewrite( rview );
    impl_fileline* fileline_1;
    impl_problem* problem_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_error_Fatal:public impl_error{
public:
    enum_operators prod_sel() const
	{ return sel_Fatal; }
    explicit impl_error_Fatal(fileline, problem);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    error rewrite( rview );
    impl_fileline* fileline_1;
    impl_problem* problem_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    problem rewrite(rview) =0;
};
class impl_problem_Problem6:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem6; }
    explicit impl_problem_Problem6(casestring, casestring, casestring, casestring, casestring, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
    impl_casestring* casestring_3;
    impl_casestring* casestring_4;
    impl_casestring* casestring_5;
    impl_casestring* casestring_6;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem5:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem5; }
    explicit impl_problem_Problem5(casestring, casestring, casestring, casestring, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
    impl_casestring* casestring_3;
    impl_casestring* casestring_4;
    impl_casestring* casestring_5;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem4:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem4; }
    explicit impl_problem_Problem4(casestring, casestring, casestring, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
    impl_casestring* casestring_3;
    impl_casestring* casestring_4;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem3int1:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem3int1; }
    explicit impl_problem_Problem3int1(casestring, casestring, casestring, integer, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
    impl_casestring* casestring_3;
    impl_integer* integer_1;
    impl_casestring* casestring_4;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem3:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem3; }
    explicit impl_problem_Problem3(casestring, casestring, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
    impl_casestring* casestring_3;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem2:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem2; }
    explicit impl_problem_Problem2(casestring, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_casestring* casestring_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1storageoption1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1storageoption1ID; }
    explicit impl_problem_Problem1storageoption1ID(casestring, storageoption, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_storageoption* storageoption_1;
    impl_casestring* casestring_2;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1INT1ID1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1INT1ID1ID; }
    explicit impl_problem_Problem1INT1ID1ID(casestring, INT, casestring, ID, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_INT* INT_1;
    impl_casestring* casestring_2;
    impl_ID* ID_1;
    impl_casestring* casestring_3;
    impl_ID* ID_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1ID1ID1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1ID1ID1ID; }
    explicit impl_problem_Problem1ID1ID1ID(casestring, ID, casestring, ID, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_ID* ID_1;
    impl_casestring* casestring_2;
    impl_ID* ID_2;
    impl_casestring* casestring_3;
    impl_ID* ID_3;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1INT1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1INT1ID; }
    explicit impl_problem_Problem1INT1ID(casestring, INT, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_INT* INT_1;
    impl_casestring* casestring_2;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1int1:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1int1; }
    explicit impl_problem_Problem1int1(casestring, integer, casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_integer* integer_1;
    impl_casestring* casestring_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1INT:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1INT; }
    explicit impl_problem_Problem1INT(casestring, INT);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_INT* INT_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1t1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1t1ID; }
    explicit impl_problem_Problem1t1ID(casestring, IDtype, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_IDtype* IDtype_1;
    impl_casestring* casestring_2;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1ID1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1ID1ID; }
    explicit impl_problem_Problem1ID1ID(casestring, ID, casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_ID* ID_1;
    impl_casestring* casestring_2;
    impl_ID* ID_2;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1we:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1we; }
    explicit impl_problem_Problem1we(casestring, withexpression);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_withexpression* withexpression_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1tID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1tID; }
    explicit impl_problem_Problem1tID(casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1ID:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1ID; }
    explicit impl_problem_Problem1ID(casestring, ID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
    impl_ID* ID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_problem_Problem1:public impl_problem{
public:
    enum_operators prod_sel() const
	{ return sel_Problem1; }
    explicit impl_problem_Problem1(casestring);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    problem rewrite( rview );
    impl_casestring* casestring_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_addedphylumdeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Niladdedphylumdeclarations: sel_Consaddedphylumdeclarations;
    }
    explicit impl_addedphylumdeclarations(addedphylumdeclaration = 0, addedphylumdeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend addedphylumdeclarations concat(c_addedphylumdeclarations, c_addedphylumdeclarations);
    addedphylumdeclarations reverse() const;
    addedphylumdeclarations rewrite(rview);
    addedphylumdeclaration last() const;
    addedphylumdeclarations append(addedphylumdeclaration);
    addedphylumdeclarations map(addedphylumdeclaration (*)(addedphylumdeclaration));
    addedphylumdeclarations filter( bool (*)(addedphylumdeclaration));
    addedphylumdeclarations merge( addedphylumdeclarations, addedphylumdeclaration (*)(addedphylumdeclaration, addedphylumdeclaration));
    addedphylumdeclaration reduce( addedphylumdeclaration, addedphylumdeclaration (*)(addedphylumdeclaration, addedphylumdeclaration));
    bool is_nil() const;
    addedphylumdeclaration addedphylumdeclaration_1;
    addedphylumdeclarations addedphylumdeclarations_1;
private:
    impl_addedphylumdeclarations* nil_rewrite(rview);
    impl_addedphylumdeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_addedphylumdeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    bool added;
    addedphylumdeclaration rewrite(rview) =0;
};
class impl_addedphylumdeclaration_AddedPhylumdeclaration:public impl_addedphylumdeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_AddedPhylumdeclaration; }
    explicit impl_addedphylumdeclaration_AddedPhylumdeclaration(uniqID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    addedphylumdeclaration rewrite( rview );
    impl_uniqID* uniqID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_countedphylumdeclarations: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilcountedphylumdeclarations: sel_Conscountedphylumdeclarations;
    }
    explicit impl_countedphylumdeclarations(countedphylumdeclaration = 0, countedphylumdeclarations = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend countedphylumdeclarations concat(c_countedphylumdeclarations, c_countedphylumdeclarations);
    countedphylumdeclarations reverse() const;
    countedphylumdeclarations rewrite(rview);
    countedphylumdeclaration last() const;
    countedphylumdeclarations append(countedphylumdeclaration);
    countedphylumdeclarations map(countedphylumdeclaration (*)(countedphylumdeclaration));
    countedphylumdeclarations filter( bool (*)(countedphylumdeclaration));
    countedphylumdeclarations merge( countedphylumdeclarations, countedphylumdeclaration (*)(countedphylumdeclaration, countedphylumdeclaration));
    countedphylumdeclaration reduce( countedphylumdeclaration, countedphylumdeclaration (*)(countedphylumdeclaration, countedphylumdeclaration));
    bool is_nil() const;
    countedphylumdeclaration countedphylumdeclaration_1;
    countedphylumdeclarations countedphylumdeclarations_1;
private:
    impl_countedphylumdeclarations* nil_rewrite(rview);
    impl_countedphylumdeclarations* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_countedphylumdeclaration: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int count;
    countedphylumdeclaration rewrite(rview) =0;
};
class impl_countedphylumdeclaration_CountedPhylumdeclaration:public impl_countedphylumdeclaration{
public:
    enum_operators prod_sel() const
	{ return sel_CountedPhylumdeclaration; }
    explicit impl_countedphylumdeclaration_CountedPhylumdeclaration(uniqID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    countedphylumdeclaration rewrite( rview );
    impl_uniqID* uniqID_1;
private:
    void do_unparse(printer_functor, uview);
};
class impl_charruns: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    int number;
    charruns set(int _n= 0);
    charruns rewrite(rview) =0;
};
class impl_charruns_Stars:public impl_charruns{
public:
    enum_operators prod_sel() const
	{ return sel_Stars; }
    explicit impl_charruns_Stars();

    charruns rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_charruns_QuotedNewlines:public impl_charruns{
public:
    enum_operators prod_sel() const
	{ return sel_QuotedNewlines; }
    explicit impl_charruns_QuotedNewlines();

    charruns rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_charruns_Newlines:public impl_charruns{
public:
    enum_operators prod_sel() const
	{ return sel_Newlines; }
    explicit impl_charruns_Newlines();

    charruns rewrite( rview );
private:
    void do_unparse(printer_functor, uview);
};
class impl_bindingidmarks: public impl_abstract_list{
public:
    static const enum_phyla phylum_sel_;
    enum_operators prod_sel() const{
	return is_nil() ? sel_Nilbindingidmarks: sel_Consbindingidmarks;
    }
    explicit impl_bindingidmarks(bindingidmark = 0, bindingidmarks = 0);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);
    friend bindingidmarks concat(c_bindingidmarks, c_bindingidmarks);
    bindingidmarks reverse() const;
    bindingidmarks rewrite(rview);
    bindingidmark last() const;
    bindingidmarks append(bindingidmark);
    bindingidmarks map(bindingidmark (*)(bindingidmark));
    bindingidmarks filter( bool (*)(bindingidmark));
    bindingidmarks merge( bindingidmarks, bindingidmark (*)(bindingidmark, bindingidmark));
    bindingidmark reduce( bindingidmark, bindingidmark (*)(bindingidmark, bindingidmark));
    bool is_nil() const;
    bindingidmark bindingidmark_1;
    bindingidmarks bindingidmarks_1;
private:
    impl_bindingidmarks* nil_rewrite(rview);
    impl_bindingidmarks* cons_rewrite(rview);
    void nil_do_unparse(printer_functor, uview);
    void do_unparse(printer_functor, uview);
};
class impl_bindingidmark: public impl_abstract_phylum{
public:
    static const enum_phyla phylum_sel_;
    bool marked;
    bindingidmark rewrite(rview) =0;
};
class impl_bindingidmark_BindingIdMark:public impl_bindingidmark{
public:
    enum_operators prod_sel() const
	{ return sel_BindingIdMark; }
    explicit impl_bindingidmark_BindingIdMark(uniqID);
    abstract_phylum subphylum(int) const;
    void set_subphylum(int, abstract_phylum);

    bindingidmark rewrite( rview );
    impl_uniqID* uniqID_1;
private:
    void do_unparse(printer_functor, uview);
};

//} // namespace Phylum


extern bool kc_storageclass_still_uniq[];

typedef struct {
    int created;
    int existing_not_found;
    int free_called[2];
    int freed[2];
} KC_OPERATOR_STATISTICS;

#ifdef KC_STATISTICS
# define print_operator_statistics(kc_f) do_print_operator_statistics(kc_f)
void	do_print_operator_statistics(FILE*);
#else
# define print_operator_statistics(kc_f)
#endif

typedef class hashtable_struct_t* hashtable_t;
const char *phylumname_or_error ( enum_phyla );
const char *kc_operatorname_or_error ( enum_operators );


} // namespace kc
#endif // KC_TYPES_HEADER
