home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ssvpar.zip / SSYACC.HPP < prev    next >
Text File  |  1994-11-28  |  6KB  |  145 lines

  1. /*---------------------------------------------------------------------------
  2.  
  3.                Copyright (c) 1994 SandStone Software Inc.
  4.                           All rights reserved
  5.  
  6. ----------------------------------------------------------------------------*/
  7. #if !defined( SSYACC)
  8. #  define SSYACC
  9. #  include<ssref.hpp>
  10. #  include<sslex.hpp>
  11.  
  12. #  define SSYaccEofLexeme        "eof"
  13. #  define SSYaccErrorLexeme      "%error"
  14. #  define SSYaccErrorToken       0xfffffffe
  15. #  define SSYaccEofToken         0xffffffff
  16.  
  17. #  define SSYaccMsgOpen          "SSYacc0101e: Open file failed, %s"
  18. #  define SSYaccMsgParse         "SSYacc0102e: Parse failed, invalid table"
  19. #  define SSYaccMsgEof           "SSYacc0103e: Attempted read past eof"
  20. #  define SSYaccMsgSelect        "SSYacc0104e: Error panic failed, no valid token"
  21. #  define SSYaccMsgTokenState    "SSYacc0105e: Error token failed, no valid token"
  22. #  define SSYaccMsgErrorTokenEof "SSYacc0106e: Error token failed, eof"
  23. #  define SSYaccMsgGoto          "SSYacc0107e: Invalid goto on %ld"
  24. #  define SSYaccMsgProdSize      "SSYacc0108e: Invalid index on elementFromProduction, %ld"
  25. #  define SSYaccMsgMissingTable  "SSYacc0109e: setTable missing, required"
  26. #  define SSYaccMsgMissingLex    "SSYacc0110e: setLex missing, required"
  27. #  define SSYaccMsgRead          "SSYacc0111e: Error reading table, %s"
  28. #  define SSYaccMsgTableSize     "SSYacc0112e: Table too big"
  29. #  define SSYaccMsgPermError     "SSYacc0113e: Permanent error"
  30.  
  31.    class SSYacc;
  32.    class SSYaccTable;
  33.    class SSYaccStackElement;
  34.  
  35.    typedef SSRef< SSYaccStackElement> SSYaccStackElementRef;
  36.  
  37.    class SSYaccTable : public SSExceptionPresent
  38.       {
  39.       friend class SSYacc;
  40.  
  41.       public:
  42.          SSConstr         SSYaccTable( const char*);
  43.          SSDestr          SSYaccTable( void);
  44.  
  45.       protected:
  46.          void*            opTable;
  47.       };
  48.  
  49.    class SSYaccStackElement : public SSRefCount
  50.       {
  51.       friend class SSYacc;
  52.  
  53.       public:
  54.          SSConstr         SSYaccStackElement( void);
  55.  
  56.          SSUnsigned32     state( void);
  57.          SSLexLexeme*     lexeme( void);
  58.          void             refFree( void);
  59.  
  60.          void             setState( SSUnsigned32);
  61.          void             setLexeme( SSLexLexeme&);
  62.  
  63.       protected:
  64.          SSLexLexemeRef   oLexeme;
  65.          SSUnsigned32     oulState;
  66.       };
  67.  
  68.    class SSYacc : public SSExceptionPresent
  69.       {
  70.       public:
  71.          SSConstr                    SSYacc( const char* = 0);
  72.          SSConstr                    SSYacc( SSLex&, const char*);
  73.          SSConstr                    SSYacc( SSLex&, SSYaccTable&);
  74.  
  75.          virtual SSBooleanValue      accept( void);
  76.          virtual SSLexLexeme*        nextLexeme( void);
  77.          virtual SSYaccStackElement* stackElement( void);
  78.          virtual SSYaccStackElement* shift( SSLexLexeme&);
  79.          virtual SSBooleanValue      error( SSUnsigned32, SSLexLexeme&);
  80.          virtual SSYaccStackElement* reduce( SSUnsigned32, SSUnsigned32) = 0;
  81.  
  82.          void                        setLex( SSLex&);
  83.          void                        setTable( const char*);
  84.          void                        setTable( SSYaccTable&);
  85.  
  86.          SSLex*                      lex( void);
  87.          void                        reset( void);
  88.          SSUnsigned32                state( void);
  89.          SSBooleanValue              parse( void);
  90.          void                        setEof( void);
  91.          SSBooleanValue              wasError( void);
  92.          void                        setAbort( void);
  93.          SSLexLexeme&                lookahead( void);
  94.          SSBooleanValue              wasAborted( void);
  95.          SSBooleanValue              errorToken( void);
  96.          SSUnsigned32                production( void);
  97.          SSUnsigned32                productionSize( void);
  98.          SSBooleanValue              pop( SSUnsigned32 = 1);
  99.          SSUnsigned32                shiftedSinceError( void);
  100.          SSBooleanValue              push( SSYaccStackElement&);
  101.          SSYaccStackElement*         elementFromStack( SSUnsigned32 = 0);
  102.          SSYaccStackElement*         elementFromProduction( SSSigned32);
  103.          SSUnsigned32*               validLookaheads( SSUnsigned32,
  104.                                         SSUnsigned32&);
  105.          SSBooleanValue              errorPanic( SSUnsigned32* = 0,
  106.                                         SSUnsigned32 = 0);
  107.  
  108.          virtual SSDestr             SSYacc( void);
  109.  
  110.       protected:
  111.          SSLex*                      opLex;
  112.          SSBooleanValue              oOwner;
  113.          SSBooleanValue              oError;
  114.          SSBooleanValue              oAbort;
  115.          SSYaccTable*                opTable;
  116.          SSUnsigned32                oulState;
  117.          SSUnsigned32                oulError;
  118.          SSLexLexemeRef              oLookahead;
  119.          SSBooleanValue              oEndOfInput;
  120.          SSUnsigned32                oulProduction;
  121.          SSUnsigned32                oulProductionSize;
  122.  
  123.       protected:
  124.          void*                       opTab;
  125.          SSUnsigned32                oAction;
  126.          void*                       opStack;
  127.          SSYaccStackElementRef       oElement;
  128.          SSLexLexemeRef              orEndLexeme;
  129.          SSUnsigned32                oulLeftside;
  130.  
  131.          SSBooleanValue              push( void);
  132.          void                        setStack( void);
  133.          SSUnsigned32                leftside( void);
  134.          SSBooleanValue              getLexeme( void);
  135.          SSBooleanValue              goTo( SSUnsigned32);
  136.          SSBooleanValue              lookupGoto( SSUnsigned32, SSUnsigned32);
  137.          void                        lookupAction( SSUnsigned32, SSUnsigned32);
  138.          void                        selectToken( SSUnsigned32*, SSUnsigned32,
  139.                                         SSBooleanValue = SSFalse);
  140.       };
  141.  
  142. #  include<ssyacc.inl>
  143.  
  144. #endif
  145.