4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * lex.c -- Generate all of the lexical type files: parser.dlg tokens.h
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * SOFTWARE RIGHTS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Set (PCCTS) -- PCCTS is in the public domain. An individual or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * company may do whatever they wish with source code distributed with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PCCTS or the code generated by PCCTS, including the incorporation of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PCCTS, or its output, into commerical software.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * We encourage users to develop software with PCCTS. However, we do ask
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * that credit is given to us for developing PCCTS. By "credit",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * we mean that if you incorporate our source code into one of your
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * programs (commercial product, research project, or otherwise) that you
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * acknowledge this fact somewhere in the documentation, research report,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * etc... If you like PCCTS and have developed a nice tool with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * output, please mention that you developed it using PCCTS. In
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * addition, we ask that this header remain intact in our source code.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * As long as these guidelines are kept, we expect to continue enhancing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * this system and expect to make other tools available as they are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * completed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ANTLR 1.33
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Terence Parr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Parr Research Corporation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * with Purdue University and AHPCRC, University of Minnesota
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 1989-2001
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <stdio.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <ctype.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 10-Apr-97 MR1 Replace use of __STDC__ with __USE_PROTOS */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "pcctscfg.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "set.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "syn.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "hash.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "generic.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DLGErrorString "invalid token"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Generate a complete lexical description of the lexemes found in the grammar */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncgenLexDescr( void )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncgenLexDescr( )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ListNode *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FILE *dlgFile = fopen(OutMetaName(DlgFileName), "w");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(dlgFile!=NULL, eMsg1("genLexFile: cannot open %s", OutMetaName(DlgFileName)) );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef SPECIAL_FOPEN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync special_fopen_actions(OutMetaName(DlgFileName)); /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "<<\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "/* %s -- DLG Description of scanner\n", DlgFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " * Generated from:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {int i; for (i=0; i<NumFiles; i++) fprintf(dlgFile, " %s", FileStr[i]);}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " * Purdue University Electrical Engineering\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " * With AHPCRC, University of Minnesota\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " * ANTLR Version %s\n", Version);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, " */\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FirstAction != NULL ) dumpAction( FirstAction, dlgFile, 0, -1, 0, 1 ); /* MR11 MR15b */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#define ANTLR_VERSION %s\n", VersionDef);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !UserDefdTokens ) fprintf(dlgFile, "#include \"%s\"\n", DefFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else fprintf(dlgFile, "#include %s\n", UserTokenDefsFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"%s\"\n", ATOKEN_H);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) fprintf(dlgFile, "#include \"%s\"\n", ASTBASE_H);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( HdrAction != NULL ) dumpAction( HdrAction, dlgFile, 0, -1, 0, 1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"pcctscfg.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"pccts_stdio.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( strcmp(ParserName, DefaultParserName)!=0 )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#define %s %s\n", DefaultParserName, ParserName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( strcmp(ParserName, DefaultParserName)!=0 )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"%s\"\n", RemapFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( HdrAction != NULL ) dumpAction( HdrAction, dlgFile, 0, -1, 0, 1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( FoundGuessBlk )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#define ZZCAN_GUESS\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"pccts_setjmp.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( OutputLL_k > 1 ) fprintf(dlgFile, "#define LL_K %d\n", OutputLL_k);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( DemandLookahead ) fprintf(dlgFile, "#define DEMAND_LOOK\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (TraceGen) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile,"#ifndef zzTRACE_RULES\n"); /* MR20 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile,"#define zzTRACE_RULES\n"); /* MR20 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile,"#endif\n"); /* MR22 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"antlr.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"ast.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( UserDefdTokens )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include %s\n", UserTokenDefsFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* still need this one as it has the func prototypes */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"%s\"\n", DefFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#include \"dlgdef.h\"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "LOOKAHEAD\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "void\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#ifdef __USE_PROTOS\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "zzerraction(void)\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#else\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "zzerraction()\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "#endif\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "{\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t(*zzerr)(\"%s\");\n", DLGErrorString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\tzzadvance();\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\tzzskip();\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "}\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, ">>\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* dump all actions */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 via <<%%lexmember ....>> & <<%%lexprefix ...>> */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (LexActions != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (p = LexActions->next; p!=NULL; p=p->next)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile, "<<%%%%lexaction\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync dumpAction( (char *)p->elem, dlgFile, 0, -1, 0, 1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, ">>\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ if (GenCC) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile,"<<%%%%parserclass %s>>\n\n",CurrentClassName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ if (LexPrefixActions != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ for (p = LexPrefixActions->next; p!=NULL; p=p->next)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile, "<<%%%%lexprefix\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ dumpAction( (char *)p->elem, dlgFile, 0, -1, 0, 1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile, ">>\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ if (LexMemberActions != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ for (p = LexMemberActions->next; p!=NULL; p=p->next)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile, "<<%%%%lexmember\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ dumpAction( (char *)p->elem, dlgFile, 0, -1, 0, 1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ fprintf(dlgFile, ">>\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */ };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* dump all regular expression rules/actions (skip sentinel node) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( ExprOrder == NULL ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync warnNoFL("no regular expressions found in grammar");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else dumpLexClasses(dlgFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "%%%%\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fclose( dlgFile );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* For each lexical class, scan ExprOrder looking for expressions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * in that lexical class. Print out only those that match.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Each element of the ExprOrder list has both an expr and an lclass
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * field.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdumpLexClasses( FILE *dlgFile )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdumpLexClasses( dlgFile )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *dlgFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TermEntry *t;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ListNode *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Expr *q;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<NumLexClasses; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\n%%%%%s\n\n", lclass[i].classnum);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (p=ExprOrder->next; p!=NULL; p=p->next)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync q = (Expr *) p->elem;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( q->lclass != i ) continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync lexmode(i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync t = (TermEntry *) hash_get(Texpr, q->expr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(t!=NULL, eMsg1("genLexDescr: rexpr %s not in hash table",q->expr) );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( t->token == EpToken ) continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "%s\n\t<<\n", StripQuotes(q->expr));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* replace " killed by StripQuotes() */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync q->expr[ strlen(q->expr) ] = '"';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !GenCC ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( TokenString(t->token) != NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t\tNLA = %s;\n", TokenString(t->token));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t\tNLA = %d;\n", t->token);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( t->action != NULL ) dumpAction( t->action, dlgFile, 2,-1,0,1 );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( TokenString(t->token) != NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t\treturn %s;\n", TokenString(t->token));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t\treturn (ANTLRTokenType)%d;\n", t->token);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(dlgFile, "\t>>\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Strip the leading path (if any) from a filename */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStripPath( char *fileName )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStripPath( fileName )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *fileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync static char dirSym[2] = DirectorySymbol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if(NULL != (p = strrchr(fileName, dirSym[0])))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = fileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return(p);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Generate a list of #defines && list of struct definitions for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * aggregate retv's */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncgenDefFile( void )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncgenDefFile( )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* If C++ mode and #tokdef used, then don't need anything in here since
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * C++ puts all definitions in the class file name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC && UserTokenDefsFile ) return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( MR_Inhibit_Tokens_h_Gen) return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DefFile = fopen(OutMetaName(DefFileName), "w");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(DefFile!=NULL, eMsg1("genDefFile: cannot open %s", OutMetaName(DefFileName)) );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef SPECIAL_FOPEN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync special_fopen_actions(OutMetaName(DefFileName)); /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "#ifndef %s\n", StripPath(gate_symbol(DefFileName)));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "#define %s\n", StripPath(gate_symbol(DefFileName)));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "/* %s -- List of labelled tokens and stuff\n", DefFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " * Generated from:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<NumFiles; i++) fprintf(DefFile, " %s", FileStr[i]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " * Purdue University Electrical Engineering\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " * ANTLR Version %s\n", Version);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, " */\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !GenCC && LexGen ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile,"#define zzEOF_TOKEN %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TokenInd!=NULL?TokenInd[EofToken]:EofToken);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !UserDefdTokens )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int first=1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC ) fprintf(DefFile, "enum ANTLRTokenType {\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=1; i<TokenNum; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Don't do EpToken or expr w/o labels */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( TokenString(i)!=NULL && i != EpToken )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TermEntry *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( WarningLevel>1 )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int j;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* look in all lexclasses for the reg expr */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR10 Derek Pappas */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR10 A #tokclass doesn't have associated regular expressiones */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR10 so don't warn user about it's omission */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = (TermEntry *) hash_get(Tname, TokenString(i));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (p != NULL && ! p->classname) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (j=0; j<NumLexClasses; j++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync lexmode(j);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( ExprString(i)!=NULL ) break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( j>=NumLexClasses )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync warnNoFL(eMsg1("token label has no associated rexpr: %s",TokenString(i)));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require((p=(TermEntry *)hash_get(Tname, TokenString(i))) != NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "token not in sym tab when it should be");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !p->classname )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !first ) fprintf(DefFile, ",\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync first = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "\t%s=%d", TokenString(i), i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "#define %s %d\n", TokenString(i), i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 10-Apr-97 133MR1 Prevent use of varying sizes of integer */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 for the enum ANTLRTokenType */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenCC ) { /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !first ) fprintf(DefFile, ",\n"); /* MR14 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "\tDLGminToken=0"); /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, ",\n\tDLGmaxToken=9999};\n"); /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }; /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !GenCC ) GenRulePrototypes(DefFile, SynDiag);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(DefFile, "\n#endif\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRemapFile( void )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRemapFile( )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( strcmp(ParserName, DefaultParserName)!=0 )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync f = fopen(OutMetaName(RemapFileName), "w");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(f!=NULL, eMsg1("GenRemapFile: cannot open %s", OutMetaName(RemapFileName)) );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef SPECIAL_FOPEN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync special_fopen_actions(OutMetaName(RemapFileName)); /* MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "/* %s -- List of symbols to remap\n", RemapFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " * Generated from:");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<NumFiles; i++) fprintf(f, " %s", FileStr[i]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " *\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " * Purdue University Electrical Engineering\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " * ANTLR Version %s\n", Version);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " */\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GenRuleFuncRedefs(f, SynDiag);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GenPredefinedSymbolRedefs(f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) GenASTSymbolRedefs(f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GenSetRedefs(f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fclose(f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Generate a bunch of #defines that rename all functions to be "ParserName_func" */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRuleFuncRedefs( FILE *f, Junction *p )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRuleFuncRedefs( f, p )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncJunction *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n/* rename rule functions to be 'ParserName_func' */\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( p!=NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#define %s %s_%s\n", p->rname, ParserName, p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = (Junction *)p->p2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Generate a bunch of #defines that rename all standard symbols to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * "ParserName_symbol". The list of standard symbols to change is in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * globals.c.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenPredefinedSymbolRedefs( FILE *f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenPredefinedSymbolRedefs( f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char **p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n/* rename PCCTS-supplied symbols to be 'ParserName_symbol' */\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (p = &StandardSymbols[0]; *p!=NULL; p++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#define %s %s_%s\n", *p, ParserName, *p);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Generate a bunch of #defines that rename all AST symbols to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * "ParserName_symbol". The list of AST symbols to change is in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * globals.c.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenASTSymbolRedefs( FILE *f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenASTSymbolRedefs( f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char **p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n/* rename PCCTS-supplied AST symbols to be 'ParserName_symbol' */\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (p = &ASTSymbols[0]; *p!=NULL; p++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#define %s %s_%s\n", *p, ParserName, *p);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* redefine all sets generated by ANTLR; WARNING: 'zzerr', 'setwd' must match
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * use in bits.c (DumpSetWd() etc...)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenSetRedefs( FILE *f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenSetRedefs( f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=1; i<=wordnum; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#define setwd%d %s_setwd%d\n", i, ParserName, i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=1; i<=esetnum; i++)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#define zzerr%d %s_err%d\n", i, ParserName, i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Find all return types/parameters that require structs and def
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * all rules with ret types.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * This is for the declaration, not the definition.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRulePrototypes( FILE *f, Junction *p )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRulePrototypes( f, p )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncJunction *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( p!=NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->ret != NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 */ if ( hasMultipleOperands(p->ret) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpRetValStruct(f, p->ret, i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n#ifdef __USE_PROTOS\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 */ if ( hasMultipleOperands(p->ret) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "extern struct _rv%d", i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "extern ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpType(p->ret, f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " %s%s(", RulePrefix, p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpANSIFunctionArgDef(f,p,1 /* emit initializers ? */);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ";\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#else\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 */ if ( hasMultipleOperands(p->ret) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "extern struct _rv%d", i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "extern ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpType(p->ret, f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " %s%s();\n", RulePrefix, p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#endif\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\n#ifdef __USE_PROTOS\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "void %s%s(", RulePrefix, p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpANSIFunctionArgDef(f,p, 1 /* emit initializers ? */ );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ";\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef OLD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl != NULL || GenAST )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "AST **%s",(p->pdecl!=NULL)?",":"");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl!=NULL ) fprintf(f, "%s", p->pdecl);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else fprintf(f, "void");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ");\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#else\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "extern void %s%s();\n", RulePrefix, p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "#endif\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = (Junction *)p->p2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Define all rules in the class.h file; generate any required
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * struct definitions first, however.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRuleMemberDeclarationsForCC( FILE *f, Junction *q )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGenRuleMemberDeclarationsForCC( f, q )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncJunction *q;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Junction *p = q;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "private:\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Dump dflt handler declaration */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\tvoid zzdflthandlers( int _signal, int *_retsignal );\n\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "public:\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Dump return value structs */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( p!=NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->ret != NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 */ if ( hasMultipleOperands(p->ret) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpRetValStruct(f, p->ret, i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = (Junction *)p->p2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Dump member func defs && CONSTRUCTOR */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\t%s(ANTLRTokenBuffer *input);\n", CurrentClassName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\t%s(ANTLRTokenBuffer *input, ANTLRTokenType eof);\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurrentClassName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = q;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( p!=NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->ret != NULL )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 */ if ( hasMultipleOperands(p->ret) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\tstruct _rv%d", i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\t");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpType(p->ret, f);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, " %s%s(",RulePrefix,p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpANSIFunctionArgDef(f,p, 1 /* emit initializers ? */ );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ";\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef OLD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl != NULL || GenAST )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) fprintf(f, "ASTBase **%s",(p->pdecl!=NULL)?",":"");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl!=NULL ) fprintf(f, "%s", p->pdecl);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ");\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\tvoid %s%s(",RulePrefix,p->rname);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpANSIFunctionArgDef(f,p, 1 /* emit initializers ? */);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ";\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef OLD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl != NULL || GenAST )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( GenAST ) fprintf(f, "ASTBase **%s",(p->pdecl!=NULL)?",":"");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( p->pdecl!=NULL ) fprintf(f, "%s", p->pdecl);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, ");\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync i++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = (Junction *)p->p2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Given a list of ANSI-style parameter declarations, print out a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * comma-separated list of the symbols (w/o types).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Basically, we look for a comma, then work backwards until start of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * the symbol name. Then print it out until 1st non-alnum char. Now,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * move on to next parameter.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR5 Jan Mikkelsen 26-May-97 - added initalComma parameter */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpListOfParmNames(char *pdecl, FILE *output, int initialComma) /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpListOfParmNames(pdecl, output, initialComma) /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *pdecl; /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *output; /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint initialComma; /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int firstTime = 1, done = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(output!=NULL, "DumpListOfParmNames: NULL parm");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( pdecl == NULL ) return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( !done )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !firstTime || initialComma ) putc(',', output); /* MR5 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync done = DumpNextNameInDef(&pdecl, output);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync firstTime = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* given a list of parameters or return values, dump the next
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * name to output. Return 1 if last one just printed, 0 if more to go.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 Total rewrite */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpNextNameInDef( char **q, FILE *output )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpNextNameInDef( q, output )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar **q;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *output;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *t;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pDataType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSymbol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pEqualSign;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSeparator;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int nest = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = endFormal(*q,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pDataType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSymbol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pEqualSign,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSeparator,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &nest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* MR26 Handle rule arguments such as: IIR_Bool (IIR_Decl::*contstraint)()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync For this we need to strip off anything which follows the symbol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ t = pSymbol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ if (t != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ for (t = pSymbol; *t != 0; t++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ if (! (isalpha(*t) || isdigit(*t) || *t == '_' || *t == '$')) break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR26 */ fprintf(output,strBetween(pSymbol, t, pSeparator));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *q = p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (*pSeparator == 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Given a list of ANSI-style parameter declarations, dump K&R-style
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * declarations, one per line for each parameter. Basically, convert
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * comma to semi-colon, newline.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpOldStyleParms( char *pdecl, FILE *output )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpOldStyleParms( pdecl, output )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *pdecl;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *output;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(output!=NULL, "DumpOldStyleParms: NULL parm");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( pdecl == NULL ) return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( *pdecl != '\0' )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *pdecl == ',' )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pdecl++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync putc(';', output); putc('\n', output);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( *pdecl==' ' || *pdecl=='\t' || *pdecl=='\n' ) pdecl++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync else {putc(*pdecl, output); pdecl++;}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync putc(';', output);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync putc('\n', output);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Take in a type definition (type + symbol) and print out type only */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 Total rewrite */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpType( char *s, FILE *f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpType( s, f )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pDataType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSymbol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pEqualSign;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSeparator;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int nest = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(s!=NULL, "DumpType: invalid type string");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = endFormal(s,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pDataType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSymbol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pEqualSign,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSeparator,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &nest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,strBetween(pDataType, pSymbol, pSeparator));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* check to see if string e is a word in string s */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstrmember( char *s, char *e )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstrmember( s, e )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *e;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register char *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require(s!=NULL&&e!=NULL, "strmember: NULL string");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *e=='\0' ) return 1; /* empty string is always member */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync do {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( *s!='\0' && !isalnum(*s) && *s!='_' )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = e;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( *p!='\0' && *p==*s ) {p++; s++;}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *p=='\0' ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *s=='\0' ) return 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !isalnum (*s) && *s != '_' ) return 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( isalnum(*s) || *s == '_' )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } while ( *s!='\0' );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 Replaced by hasMultipleOperands() */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHasComma( char *s )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncHasComma( s )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (*s!='\0')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *s++ == ',' ) return 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR23 Total rewrite */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncvoid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpRetValStruct( FILE *f, char *ret, int i )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDumpRetValStruct( f, ret, i )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFILE *f;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *ret;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncint i;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *p = ret;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pDataType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSymbol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pEqualSign;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync char *pSeparator;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int nest = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f, "\nstruct _rv%d {\n", i);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (*p != 0 && nest == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync p = endFormal(p,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pDataType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSymbol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pEqualSign,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &pSeparator,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &nest);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,"\t");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,strBetween(pDataType, pSymbol, pSeparator));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f," ");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,strBetween(pSymbol, pEqualSign, pSeparator));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,";\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(f,"};\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* given "s" yield s -- DESTRUCTIVE (we modify s if starts with " else return s) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef __USE_PROTOS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStripQuotes( char *s )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStripQuotes( s )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncchar *s;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( *s == '"' )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync s[ strlen(s)-1 ] = '\0'; /* remove last quote */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return( s+1 ); /* return address past initial quote */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return( s );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}