www.pudn.com > pccts133.zip > DLexer.cpp
/* DLexer.c
*
* SOFTWARE RIGHTS
*
* We reserve no LEGAL rights to the Purdue Compiler Construction Tool
* Set (PCCTS) -- PCCTS is in the public domain. An individual or
* company may do whatever they wish with source code distributed with
* PCCTS or the code generated by PCCTS, including the incorporation of
* PCCTS, or its output, into commerical software.
*
* We encourage users to develop software with PCCTS. However, we do ask
* that credit is given to us for developing PCCTS. By "credit",
* we mean that if you incorporate our source code into one of your
* programs (commercial product, research project, or otherwise) that you
* acknowledge this fact somewhere in the documentation, research report,
* etc... If you like PCCTS and have developed a nice tool with the
* output, please mention that you developed it using PCCTS. In
* addition, we ask that this header remain intact in our source code.
* As long as these guidelines are kept, we expect to continue enhancing
* this system and expect to make other tools available as they are
* completed.
*
* ANTLR 1.33
* Terence Parr
* Parr Research Corporation
* with Purdue University and AHPCRC, University of Minnesota
* 1989-1998
*/
#define ZZINC {if ( track_columns ) (++_endcol);}
#define ZZGETC {ch = input->nextChar(); cl = ZZSHIFT(ch);}
#define ZZNEWSTATE (newstate = dfa[state][cl])
#ifndef ZZCOPY
#define ZZCOPY \
/* Truncate matching buffer to size (not an error) */ \
if (nextpos < lastpos){ \
*(nextpos++) = ch; \
}else{ \
bufovf = 1; \
}
#endif
void DLGLexer::
mode( int m )
{
/* points to base of dfa table */
if (m*actions[accepts[state]])();
// MR1
// MR1 11-Apr-97 Help for tracking DLG results
// MR1
#ifdef DEBUG_LEXER
/* MR1 */ if (debugLexerFlag) {
/* MR1 */ if (parser != NULL) {
/* MR1 */ printf("\ntoken name=%s",parser->parserTokenName(tk));
/* MR1 */ } else {
/* MR1 */ printf("\ntoken nnumber=%d",tk);
/* MR1 */ };
/* MR1 */ printf(" lextext=(%s) mode=%d",
/* MR1 */ (_lextext[0]=='\n' && _lextext[1]==0) ?
/* MR1 */ "newline" : _lextext,
/* MR1 */ automaton);
/* MR1 */ if (interactive && !charfull) {
/* MR1 */ printf(" char=empty");
/* MR1 */ } else {
/* MR1 */ if (ch=='\n') {
/* MR1 */ printf(" char=newline");
/* MR1 */ } else {
/* MR1 */ printf(" char=(%c)",ch);
/* MR1 */ };
/* MR1 */ };
/* MR1 */ printf(" %s\n",
/* MR1 */ (add_erase==1 ? "skip()" :
/* MR1 */ add_erase==2 ? "more()" :
/* MR1 */ ""));
/* MR1 */ };
#endif
switch (add_erase) {
case 1: goto skip;
case 2: goto more;
}
return tk;
}
void DLGLexer::
advance()
{
if ( input==NULL ) err_in();
ZZGETC; charfull = 1; ZZINC;
}