home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ssvpar.zip / SSCALC.YHH < prev    next >
Text File  |  1994-12-01  |  6KB  |  230 lines

  1. #if !defined( SSCALCSSHH)
  2. #  define SSCALCSSHH
  3. #  include<sslex.hpp>
  4. #  include<ssyacc.hpp>
  5.  
  6. #  define ALexExpressionListMain       0
  7. #  define ALexExpressionListMLCom      1
  8. #  define ALexExpressionListSLCom      2
  9.  
  10. #  define ALexEnd                      4
  11. #  define ALexPlus                     5
  12. #  define ALexMinus                    6
  13. #  define ALexDiv                      7
  14. #  define ALexMult                     8
  15. #  define ALexMod                      9
  16. #  define ALexPow                      10
  17. #  define ALexOr                       11
  18. #  define ALexAnd                      12
  19. #  define ALexNot                      13
  20. #  define ALexOParen                   14
  21. #  define ALexCParen                   15
  22. #  define ALexDec                      16
  23. #  define ALexOct                      17
  24. #  define ALexHex                      18
  25.  
  26. #  define AYaccStart                   1
  27. #  define AYaccStartList               2
  28. #  define AYaccExprSingle              3
  29. #  define AYaccExprError               4
  30. #  define AYaccExprPlus                5
  31. #  define AYaccExprMinus               6
  32. #  define AYaccExprMult                7
  33. #  define AYaccExprDiv                 8
  34. #  define AYaccExprMod                 9
  35. #  define AYaccExprNot                 10
  36. #  define AYaccExprAnd                 11
  37. #  define AYaccExprOr                  12
  38. #  define AYaccExprNested              13
  39. #  define AYaccExprNumber              14
  40. #  define AYaccNumberDec               15
  41. #  define AYaccNumberOct               16
  42. #  define AYaccNumberHex               17
  43.  
  44.    class ALexClass : public SSLex
  45.       {
  46.       public:
  47.          SSConstr            ALexClass( const char*);
  48.          const char*         tokenToConstChar( SSUnsigned32);
  49.       };
  50.  
  51.    ALexClass::ALexClass( const char* qpszFile) : 
  52.       SSLex( qpszFile, "\\ss\\ycc\\sscalc.dfa")
  53.       {
  54.       }
  55.  
  56.    const char* ALexClass::tokenToConstChar( SSUnsigned32 qulToken)
  57.       {
  58.       const char* zpchToken;
  59.       switch ( qulToken)
  60.          {
  61.          case ALexEnd:
  62.             zpchToken = ";";
  63.             break;
  64.  
  65.          case ALexPlus:
  66.             zpchToken = "+";
  67.             break;
  68.  
  69.          case ALexMinus:
  70.             zpchToken = "-";
  71.             break;
  72.  
  73.          case ALexDiv:
  74.             zpchToken = "/";
  75.             break;
  76.  
  77.          case ALexMult:
  78.             zpchToken = "*";
  79.             break;
  80.  
  81.          case ALexMod:
  82.             zpchToken = "%";
  83.             break;
  84.  
  85.          case ALexPow:
  86.             zpchToken = "**";
  87.             break;
  88.  
  89.          case ALexOr:
  90.             zpchToken = "or";
  91.             break;
  92.  
  93.          case ALexAnd:
  94.             zpchToken = "and";
  95.             break;
  96.  
  97.          case ALexNot:
  98.             zpchToken = "not";
  99.             break;
  100.  
  101.          case ALexOParen:
  102.             zpchToken = "(";
  103.             break;
  104.  
  105.          case ALexCParen:
  106.             zpchToken = ")";
  107.             break;
  108.  
  109.          case ALexDec:
  110.             zpchToken = "dec";
  111.             break;
  112.  
  113.          case ALexOct:
  114.             zpchToken = "oct";
  115.             break;
  116.  
  117.          case ALexHex:
  118.             zpchToken = "hex";
  119.             break;
  120.  
  121.          case SSYaccErrorToken:
  122.             zpchToken = "%error";
  123.             break;
  124.  
  125.          case SSYaccEofToken:
  126.             zpchToken = "eof";
  127.             break;
  128.  
  129.          default:
  130.             zpchToken = SSLexTokenNotFound;
  131.          }
  132.       return zpchToken;
  133.       }
  134.  
  135.    class AYaccClass : public SSYacc
  136.       {
  137.       public:
  138.          SSConstr            AYaccClass( const char*);
  139.          SSYaccStackElement* reduce( SSUnsigned32, SSUnsigned32);
  140.  
  141.       protected:
  142.          SSLex               oLex;
  143.       };
  144.  
  145.    AYaccClass::AYaccClass( const char* qpszFile) : 
  146.       SSYacc("\\ss\\ycc\\sscalc.llr"),
  147.       oLex( qpszFile, "\\ss\\ycc\\sscalc.dfa")
  148.       {
  149.       setLex( oLex);
  150.       }
  151.  
  152.    SSYaccStackElement* AYaccClass::reduce( SSUnsigned32 qulProd,
  153.       SSUnsigned32 qulSize)
  154.       {
  155.       switch ( qulProd)
  156.          {
  157.          case AYaccStart:
  158.          // start -> exprStatement 
  159.             break;
  160.  
  161.          case AYaccStartList:
  162.          // start -> start exprStatement 
  163.             break;
  164.  
  165.          case AYaccExprSingle:
  166.          // exprStatement -> expr ; 
  167.             break;
  168.  
  169.          case AYaccExprError:
  170.          // exprStatement -> %error ; 
  171.             break;
  172.  
  173.          case AYaccExprPlus:
  174.          // expr -> expr + expr 
  175.             break;
  176.  
  177.          case AYaccExprMinus:
  178.          // expr -> expr - expr 
  179.             break;
  180.  
  181.          case AYaccExprMult:
  182.          // expr -> expr * expr 
  183.             break;
  184.  
  185.          case AYaccExprDiv:
  186.          // expr -> expr / expr 
  187.             break;
  188.  
  189.          case AYaccExprMod:
  190.          // expr -> expr % expr 
  191.             break;
  192.  
  193.          case AYaccExprNot:
  194.          // expr -> not expr 
  195.             break;
  196.  
  197.          case AYaccExprAnd:
  198.          // expr -> expr and expr 
  199.             break;
  200.  
  201.          case AYaccExprOr:
  202.          // expr -> expr or expr 
  203.             break;
  204.  
  205.          case AYaccExprNested:
  206.          // expr -> ( expr ) 
  207.             break;
  208.  
  209.          case AYaccExprNumber:
  210.          // expr -> number 
  211.             break;
  212.  
  213.          case AYaccNumberDec:
  214.          // number -> dec 
  215.             break;
  216.  
  217.          case AYaccNumberOct:
  218.          // number -> oct 
  219.             break;
  220.  
  221.          case AYaccNumberHex:
  222.          // number -> hex 
  223.             break;
  224.  
  225.          }
  226.  
  227.       return stackElement();
  228.       }
  229.  
  230. #endif