You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tellico/src/translators/btparse/bibtex.c

313 lines
6.5 KiB

/*
* A n t l r T r a n s l a t i o n H e a d e r
*
* Terence Parr, Will Cohen, and Hank Dietz: 1989-1994
* Purdue University Electrical Engineering
* With AHPCRC, University of Minnesota
* ANTLR Version 1.33
*/
#include <stdio.h>
#define ANTLR_VERSION 133
#define ZZCOL
#define USER_ZZSYN
#include "btconfig.h"
#include "btparse.h"
#include "attrib.h"
#include "lex_auxiliary.h"
#include "error.h"
#include "parse_auxiliary.h"
/*#include "my_dmalloc.h"*/
extern char * InputFilename; /* for zzcr_ast call in pccts/ast.c */
#define GENAST
#include "ast.h"
#define zzSET_SIZE 4
#include "antlr.h"
#include "tokens.h"
#include "dlgdef.h"
#include "mode.h"
#ifndef PURIFY
#define PURIFY(r,s)
#endif
#include "ast.c"
zzASTgvars
ANTLR_INFO
void
bibfile(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
AST *last; (*_root) = NULL;
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (LA(1)==AT) ) {
_ast = NULL; entry(&_ast);
/* a little creative forestry... */
if ((*_root) == NULL)
(*_root) = zzastArg(1);
else
last->right = zzastArg(1);
last = zzastArg(1);
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x1);
}
}
void
entry(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
bt_metatype metatype;
zzmatch(AT); zzCONSUME;
zzmatch(NAME); zzsubroot(_root, &_sibling, &_tail);
metatype = entry_metatype();
zzastArg(1)->nodetype = BTAST_ENTRY;
zzastArg(1)->metatype = metatype;
zzCONSUME;
body(zzSTR, metatype ); zzlink(_root, &_sibling, &_tail);
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x2);
}
}
void
body(AST**_root, bt_metatype metatype )
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
if ( (LA(1)==STRING) ) {
if (!(metatype == BTE_COMMENT )) {zzfailed_pred(" metatype == BTE_COMMENT ");}
zzmatch(STRING); zzsubchild(_root, &_sibling, &_tail);
zzastArg(1)->nodetype = BTAST_STRING;
zzCONSUME;
}
else {
if ( (LA(1)==ENTRY_OPEN) ) {
zzmatch(ENTRY_OPEN); zzCONSUME;
contents(zzSTR, metatype ); zzlink(_root, &_sibling, &_tail);
zzmatch(ENTRY_CLOSE); zzCONSUME;
}
else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x4);
}
}
void
contents(AST**_root, bt_metatype metatype )
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
if ( (setwd1[LA(1)]&0x8)&&(metatype == BTE_REGULAR /* || metatype == BTE_MODIFY */ ) ) {
if (!(metatype == BTE_REGULAR /* || metatype == BTE_MODIFY */ )) {zzfailed_pred(" metatype == BTE_REGULAR /* || metatype == BTE_MODIFY */ ");}
{
zzBLOCK(zztasp2);
zzMake0;
{
if ( (LA(1)==NAME) ) {
zzmatch(NAME); zzsubchild(_root, &_sibling, &_tail); zzCONSUME;
}
else {
if ( (LA(1)==NUMBER) ) {
zzmatch(NUMBER); zzsubchild(_root, &_sibling, &_tail); zzCONSUME;
}
else {zzFAIL(1,zzerr2,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp2);
}
}
zzastArg(1)->nodetype = BTAST_KEY;
zzmatch(COMMA); zzCONSUME;
fields(zzSTR); zzlink(_root, &_sibling, &_tail);
}
else {
if ( (setwd1[LA(1)]&0x10)&&(metatype == BTE_MACRODEF ) ) {
if (!(metatype == BTE_MACRODEF )) {zzfailed_pred(" metatype == BTE_MACRODEF ");}
fields(zzSTR); zzlink(_root, &_sibling, &_tail);
}
else {
if ( (setwd1[LA(1)]&0x20)&&(metatype == BTE_PREAMBLE ) ) {
if (!(metatype == BTE_PREAMBLE )) {zzfailed_pred(" metatype == BTE_PREAMBLE ");}
value(zzSTR); zzlink(_root, &_sibling, &_tail);
}
else {zzFAIL(1,zzerr3,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x40);
}
}
void
fields(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
if ( (LA(1)==NAME) ) {
field(zzSTR); zzlink(_root, &_sibling, &_tail);
{
zzBLOCK(zztasp2);
zzMake0;
{
if ( (LA(1)==COMMA) ) {
zzmatch(COMMA); zzCONSUME;
fields(zzSTR); zzlink(_root, &_sibling, &_tail);
}
zzEXIT(zztasp2);
}
}
}
else {
if ( (LA(1)==ENTRY_CLOSE) ) {
}
else {zzFAIL(1,zzerr4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd1, 0x80);
}
}
void
field(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
zzmatch(NAME); zzsubroot(_root, &_sibling, &_tail);
zzastArg(1)->nodetype = BTAST_FIELD; check_field_name (zzastArg(1));
zzCONSUME;
zzmatch(EQUALS); zzCONSUME;
value(zzSTR); zzlink(_root, &_sibling, &_tail);
#if DEBUG > 1
printf ("field: fieldname = %p (%s)\n"
" first val = %p (%s)\n",
zzastArg(1)->text, zzastArg(1)->text, zzastArg(2)->text, zzastArg(2)->text);
#endif
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd2, 0x1);
}
}
void
value(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
simple_value(zzSTR); zzlink(_root, &_sibling, &_tail);
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (LA(1)==HASH) ) {
zzmatch(HASH); zzCONSUME;
simple_value(zzSTR); zzlink(_root, &_sibling, &_tail);
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd2, 0x2);
}
}
void
simple_value(AST**_root)
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
if ( (LA(1)==STRING) ) {
zzmatch(STRING); zzsubchild(_root, &_sibling, &_tail);
zzastArg(1)->nodetype = BTAST_STRING;
zzCONSUME;
}
else {
if ( (LA(1)==NUMBER) ) {
zzmatch(NUMBER); zzsubchild(_root, &_sibling, &_tail);
zzastArg(1)->nodetype = BTAST_NUMBER;
zzCONSUME;
}
else {
if ( (LA(1)==NAME) ) {
zzmatch(NAME); zzsubchild(_root, &_sibling, &_tail);
zzastArg(1)->nodetype = BTAST_MACRO;
zzCONSUME;
}
else {zzFAIL(1,zzerr5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd2, 0x4);
}
}