The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#ifndef BIBTEX_AST_H
#define BIBTEX_AST_H

typedef enum 
{ 
   AST_BOGUS,                           /* to detect uninitialized nodes */
   AST_ECOMMENT, AST_EPREAMBLE, AST_EMACRODEF, AST_EALIAS, AST_EMODIFY,
   AST_ENTRY, AST_KEY, AST_FIELD, AST_STRING, AST_NUMBER, AST_MACRO
} nodetype_t;

#define AST_FIELDS int line, offset; nodetype_t nodetype; char *text;
#define zzcr_ast(ast,attr,tok,txt)              \
{                                               \
   (ast)->line = (attr)->line;                  \
   (ast)->offset = (attr)->offset;              \
   (ast)->text = strdup ((attr)->text);         \
}
#define zzd_ast(ast)                                                    \
   if ((ast)->text != NULL) free ((ast)->text);

#endif /* BIBTEX_AST_H */