home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ssvpar.zip / SSCALC.CMD < prev    next >
OS/2 REXX Batch file  |  1994-12-01  |  5KB  |  191 lines

  1. /* Visual Parse++ REXX function*/
  2.  
  3. SSDll = '\SSVPARSE\BIN\SSVPREXX.DLL'
  4. call RxFuncAdd 'SSLoadRexxFunctions', SSDll, 'SSLoadRexxFunctions'
  5. call SSLoadRexxFunctions SSDll
  6.  
  7. signal on error name SSTerminate
  8. signal on syntax name SSTerminate
  9. signal on failure name SSTerminate
  10.  
  11. ALexEnd         = 4
  12. ALexPlus        = 5
  13. ALexMinus       = 6
  14. ALexDiv         = 7
  15. ALexMult        = 8
  16. ALexMod         = 9
  17. ALexPow         = 10
  18. ALexOr          = 11
  19. ALexAnd         = 12
  20. ALexNot         = 13
  21. ALexOParen      = 14
  22. ALexCParen      = 15
  23. ALexDec         = 16
  24. ALexOct         = 17
  25. ALexHex         = 18
  26.  
  27. AYaccStart      = 1
  28. AYaccStartList  = 2
  29. AYaccExprSingle = 3
  30. AYaccExprError  = 4
  31. AYaccExprPlus   = 5
  32. AYaccExprMinus  = 6
  33. AYaccExprMult   = 7
  34. AYaccExprDiv    = 8
  35. AYaccExprMod    = 9
  36. AYaccExprNot    = 10
  37. AYaccExprAnd    = 11
  38. AYaccExprOr     = 12
  39. AYaccExprNested = 13
  40. AYaccExprNumber = 14
  41. AYaccNumberDec  = 15
  42. AYaccNumberOct  = 16
  43. AYaccNumberHex  = 17
  44.  
  45. ALexClassTable = '\ss\ycc\sscalc.dfa'
  46. ALexClassConsumer = 'Visual Parse++ Consumer'
  47. ALexClass = SSLexCreate( ALexClassTable, ALexClassConsumer, SSFile)
  48. ALexClassTable = ''
  49. AYaccClassTable = '\ss\ycc\sscalc.llr'
  50. AYaccClass = SSYaccCreate( ALexClass, AYaccClassTable)
  51. AYaccClassTable = ''
  52.  
  53. do forever
  54.    SSRet = SSYaccParse( AYaccClass, SSParm)
  55.    select
  56.       when SSRet = SSOK then
  57.          nop /* say 'Lexeme 'SSParm.0' at' SSParm.2','SSParm.3*/
  58.       when SSRet = SSMORE then do
  59.          SSRet = ALexClassProcessMore()
  60.          if SSRet <> "" then
  61.             SSRet = SSLexAddData( ALexClass, SSRet)
  62.          end
  63.       when SSRet = SSSHIFT then
  64.          nop /* say 'Shift 'SSParm.0' at' SSParm.2','SSParm.3*/
  65.       when SSRet = SSREDUCE then
  66.          call AYaccClassReduce
  67.       when SSRet = SSACCEPT then do
  68.          leave
  69.          end
  70.       when SSRet = SSLEXERROR then do
  71.          SSRet = ALexClassProcessError()
  72.          if SSRet < 0 then leave
  73.          end
  74.       when SSRet = SSYACCERROR then do
  75.          SSRet = AYaccClassProcessError()
  76.          if SSRet < 0 then leave
  77.          end
  78.       when SSRet = SSPERMERROR then do
  79.          say 'Permanent error'
  80.          leave
  81.          end
  82.       otherwise do
  83.          say 'Unprocessed parse 'SSRet
  84.          leave
  85.          end
  86.    end
  87. end
  88.  
  89. call SSCleanup
  90. return 0
  91.  
  92.  
  93.  
  94. AYaccClassProcessError:
  95.    say 'Syntax error at 'SSParm.2','SSParm.3': 'SSParm.0
  96.    return -1
  97.  
  98. SSCleanup:
  99.    if ALexClassTable = '' then
  100.       call SSLexDestroy ALexClass
  101.    if AYaccClassTable = '' then
  102.       call SSYaccDestroy AYaccClass
  103.    call SSUnloadRexxFunctions
  104.    return
  105.  
  106. ALexClassProcessMore:
  107.    return ''
  108.  
  109. ALexClassProcessError:
  110.    say 'Invalid lexeme at 'SSParm.2','SSParm.3': 'SSParm.0
  111.    return -1
  112.  
  113. AYaccClassReduce:
  114.    say 'Reduce 'SSParm.0
  115.    select
  116.       when SSParm.0 = AYaccStart then do
  117.       /* start -> exprStatement */
  118.          end
  119.  
  120.       when SSParm.0 = AYaccStartList then do
  121.       /* start -> start exprStatement */
  122.          end
  123.  
  124.       when SSParm.0 = AYaccExprSingle then do
  125.       /* exprStatement -> expr ; */
  126.          end
  127.  
  128.       when SSParm.0 = AYaccExprError then do
  129.       /* exprStatement -> %error ; */
  130.          end
  131.  
  132.       when SSParm.0 = AYaccExprPlus then do
  133.       /* expr -> expr + expr */
  134.          end
  135.  
  136.       when SSParm.0 = AYaccExprMinus then do
  137.       /* expr -> expr - expr */
  138.          end
  139.  
  140.       when SSParm.0 = AYaccExprMult then do
  141.       /* expr -> expr * expr */
  142.          end
  143.  
  144.       when SSParm.0 = AYaccExprDiv then do
  145.       /* expr -> expr / expr */
  146.          end
  147.  
  148.       when SSParm.0 = AYaccExprMod then do
  149.       /* expr -> expr % expr */
  150.          end
  151.  
  152.       when SSParm.0 = AYaccExprNot then do
  153.       /* expr -> not expr */
  154.          end
  155.  
  156.       when SSParm.0 = AYaccExprAnd then do
  157.       /* expr -> expr and expr */
  158.          end
  159.  
  160.       when SSParm.0 = AYaccExprOr then do
  161.       /* expr -> expr or expr */
  162.          end
  163.  
  164.       when SSParm.0 = AYaccExprNested then do
  165.       /* expr -> ( expr ) */
  166.          end
  167.  
  168.       when SSParm.0 = AYaccExprNumber then do
  169.       /* expr -> number */
  170.          end
  171.  
  172.       when SSParm.0 = AYaccNumberDec then do
  173.       /* number -> dec */
  174.          end
  175.  
  176.       when SSParm.0 = AYaccNumberOct then do
  177.       /* number -> oct */
  178.          end
  179.  
  180.       when SSParm.0 = AYaccNumberHex then do
  181.       /* number -> hex */
  182.          end
  183.  
  184.    end
  185.    return
  186.  
  187. SSTerminate:
  188.    say 'Error on line 'sigl': 'SSResult
  189.    call SSCleanup
  190.    exit 1
  191.