13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* DLGLexerBase.h
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
33eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * SOFTWARE RIGHTS
43eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * company may do whatever they wish with source code distributed with
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * PCCTS or the code generated by PCCTS, including the incorporation of
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * PCCTS, or its output, into commerical software.
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * We encourage users to develop software with PCCTS.  However, we do ask
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * that credit is given to us for developing PCCTS.  By "credit",
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * we mean that if you incorporate our source code into one of your
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * programs (commercial product, research project, or otherwise) that you
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * acknowledge this fact somewhere in the documentation, research report,
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * etc...  If you like PCCTS and have developed a nice tool with the
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * output, please mention that you developed it using PCCTS.  In
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * addition, we ask that this header remain intact in our source code.
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * As long as these guidelines are kept, we expect to continue enhancing
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * this system and expect to make other tools available as they are
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * completed.
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang *
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * ANTLR 1.33
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * Terence Parr
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * Parr Research Corporation
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * with Purdue University and AHPCRC, University of Minnesota
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang * 1989-1998
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang */
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef DLGX_H
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define DLGX_H
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "pcctscfg.h"
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "pccts_stdio.h"
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangPCCTS_NAMESPACE_STD
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include ATOKEN_H
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include ATOKENSTREAM_H
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass ANTLRParser;              // MR1
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* must define what a char looks like; can make this a class too */
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef char DLGChar;
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*  Can have it as a class too: (ack this looks weird; is it right?)
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGChar {
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangprivate:
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int c;
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar(int ch) { c = ch; }
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int atom() { return c; }
533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang*/
553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* user must subclass this */
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGInputStream {
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual int nextChar() = 0;
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* Predefined char stream: Input from FILE */
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGFileInput : public DLGInputStream {
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangprivate:
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int found_eof;
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  FILE *input;
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGFileInput(FILE *f) { input = f; found_eof = 0; }
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int nextChar() {
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      int c;
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      if ( found_eof ) return EOF;
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      else {
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        c=getc(input);
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        if ( c==EOF ) found_eof = 1;
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        return c;
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      }
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    void DLGFileReset(FILE *f) {input=f; found_eof = 0; };              // MR11
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// MR9  Suggested by Bruce Guenter (bruceg@qcc.sk.ca)
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// MR9  Make DLGStringInput const correct
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* Predefined char stream: Input from string */
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGStringInput : public DLGInputStream {
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangprivate:
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  const DLGChar *input;                                           // MR9
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  const DLGChar *p;                                               // MR9
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGStringInput(const DLGChar *s) { input = s; p = &input[0];}   // MR9
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int nextChar()
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    {
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      if (*p) return (int) (unsigned char) *p++;              // MR14
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      else return EOF;
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    }
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    void DLGStringReset(const DLGChar *s) {input=s; p= &input[0]; }; // MR11 // MR16
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGState {
1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
1023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGInputStream *input;
1033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int interactive;
1043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int track_columns;
1053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int auto_num;
1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int add_erase;
1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int lookc;
1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int char_full;
1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int begcol, endcol;
1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int line;
1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar *lextext, *begexpr, *endexpr;
1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int bufsize;
1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int bufovf;
1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar *nextpos;
1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  class_num;
1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  debugLexerFlag;            // MR1
1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ANTLRParser *parser;            // MR1
1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/* user must subclass this */
1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangclass DllExportPCCTS DLGLexerBase : public ANTLRTokenStream {
1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual ANTLRTokenType erraction();
1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangprotected:
1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGInputStream *input;
1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int interactive;
1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int track_columns;
1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *_lextext;  /* text of most recently matched token */
1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *_begexpr;  /* beginning of last reg expr recogn. */
1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *_endexpr;  /* beginning of last reg expr recogn. */
1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  _bufsize;    /* number of characters in lextext */
1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  _begcol;    /* column that first character of token is in*/
1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  _endcol;    /* column that last character of token is in */
1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  _line;      /* line current token is on */
1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  ch;        /* character to determine next state */
1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  bufovf;      /* indicates that buffer too small for text */
1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  charfull;
1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *nextpos;  /* points to next available position in lextext*/
1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  cl;
1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int automaton;
1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  add_erase;
1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar ebuf[70];
1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  _ANTLRTokenPtr token_to_fill;
1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int  debugLexerFlag;            // MR1
1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  ANTLRParser  *parser;          // MR1
1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangpublic:
1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual _ANTLRTokenPtr getToken();      // MR12 public
1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual void advance(void) = 0;
1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  skip(void);    /* erase lextext, look for antoher token */
1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  more(void);    /* keep lextext, look for another token */
1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  mode(int k);  /* switch to automaton 'k' */
1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  saveState(DLGState *);
1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  restoreState(DLGState *);
1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual ANTLRTokenType nextTokenType(void)=0;/* get next token */
1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  replchar(DLGChar c);  /* replace last recognized reg. expr. with
1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                   a character */
1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  replstr(const DLGChar *s);  /* replace last recognized reg. expr. with
1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                       a string */ /* MR20 const */
1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        virtual int err_in();            // MR1
1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual void errstd(const char *);        // MR1  MR20 const
1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int    line()    { return _line; }
1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  set_line(int newValue)  { _line=newValue; };    // MR1
1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual void newline()  { _line++; }
1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *lextext()  { return _lextext; }
1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int    begcol()  { return _begcol; }
1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int    endcol()  { return _endcol; }
1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  set_begcol(int a)  { _begcol=a; }
1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  set_endcol(int a)  { _endcol=a; }
1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *begexpr()  { return _begexpr; }
1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGChar  *endexpr()  { return _endexpr; }
1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  int    bufsize()  { return _bufsize; }
1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  setToken(ANTLRAbstractToken *t)  { token_to_fill = t; }
1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  setInputStream(DLGInputStream *);
1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  DLGLexerBase(DLGInputStream *in,
1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang         unsigned bufsize=2000,
1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang         int interactive=0,
1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang         int track_columns=0);
1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void reset();                  // MR19
1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual ~DLGLexerBase() { delete [] _lextext; }
1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual void panic(const char *msg);      // MR1  MR20 const
1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  void  trackColumns() {
1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        track_columns = 1;
1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        this->_begcol = 0;
1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang        this->_endcol = 0;
1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      };
1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual ANTLRParser *setParser(ANTLRParser *p);      // MR1
1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual ANTLRParser *getParser();        // MR1
1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  virtual int debugLexer(int value);        // MR1
1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    int     lexErrCount;                            // MR12
1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
198