diff options
Diffstat (limited to '')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/h/DLexer.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/h/DLexer.h b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/h/DLexer.h new file mode 100644 index 00000000..afc172ae --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/Pccts/h/DLexer.h @@ -0,0 +1,194 @@ +/* DLexer.h (formerly DLexer.cpp) + * + * This was renamed because the use of the .cpp extension caused problems + * with IDEs. + * + * 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-2000 + */ + +#include <assert.h> + +#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<MAX_MODE){ + automaton = m; + /* have to redo class since using different compression */ + cl = ZZSHIFT(ch); + }else{ + sprintf((char *)ebuf,"Invalid automaton mode = %d ",m); + errstd(ebuf); + } +} + +ANTLRTokenType DLGLexer:: +nextTokenType(void) +{ + register int state, newstate; + /* last space reserved for the null char */ + register DLGChar *lastpos; + ANTLRTokenType tk; + +skip: + bufovf = 0; + lastpos = &_lextext[_bufsize-1]; + nextpos = _lextext; + _begcol = _endcol+1; +more: + _begexpr = nextpos; + if ( interactive ) { + /* interactive version of automaton */ + /* if there is something in ch, process it */ + state = newstate = dfa_base[automaton]; + if (charfull){ + ZZINC; + ZZCOPY; + ZZNEWSTATE; + } + while (alternatives[newstate]){ + state = newstate; + ZZGETC; + ZZINC; + ZZCOPY; + ZZNEWSTATE; + } + /* figure out if last character really part of token */ + if ((state != dfa_base[automaton]) && (newstate == DfaStates)){ + charfull = 1; + --nextpos; + }else{ + charfull = 0; + state = newstate; + } + *(nextpos) = '\0'; + /* Able to transition out of start state to some non err state?*/ + if ( state == dfa_base[automaton] ){ + /* make sure doesn't get stuck */ + advance(); + } + } + else { /* non-interactive version of automaton */ + if (!charfull) + advance(); + else + ZZINC; + state = dfa_base[automaton]; + while (ZZNEWSTATE != DfaStates) { + state = newstate; + assert(state <= sizeof(dfa)/sizeof(dfa[0])); + ZZCOPY; + ZZGETC; + ZZINC; + } + charfull = 1; + if ( state == dfa_base[automaton] ){ + if (nextpos < lastpos){ + *(nextpos++) = ch; + }else{ + bufovf = 1; + } + *nextpos = '\0'; + /* make sure doesn't get stuck */ + advance(); + }else{ + *nextpos = '\0'; + } + } + if ( track_columns ) _endcol -= charfull; + _endexpr = nextpos -1; + add_erase = 0; +#ifdef OLD + tk = (ANTLRTokenType) + (*actions[accepts[state]])(this); // must pass this manually + // actions is not a [] of pointers + // to member functions. +#endif + tk = (this->*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 */ /* MR23 */ printMessage(stdout, "\ntoken name=%s",parser->parserTokenName(tk)); +/* MR1 */ } else { +/* MR1 */ /* MR23 */ printMessage(stdout, "\ntoken nnumber=%d",tk); +/* MR1 */ }; +/* MR1 */ /* MR23 */ printMessage(stdout, " lextext=(%s) mode=%d", +/* MR1 */ (_lextext[0]=='\n' && _lextext[1]==0) ? +/* MR1 */ "newline" : _lextext, +/* MR1 */ automaton); +/* MR1 */ if (interactive && !charfull) { +/* MR1 */ /* MR23 */ printMessage(stdout, " char=empty"); +/* MR1 */ } else { +/* MR1 */ if (ch=='\n') { +/* MR1 */ /* MR23 */ printMessage(stdout, " char=newline"); +/* MR1 */ } else { +/* MR1 */ /* MR23 */ printMessage(stdout, " char=(%c)",ch); +/* MR1 */ }; +/* MR1 */ }; +/* MR1 */ /* MR23 */ printMessage(stdout, " %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; +} |