home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / users / Harry / compilers / yapp / tst / grammarPCAT < prev   
Text File  |  2003-05-23  |  3KB  |  116 lines

  1. (* A Context-free Grammar for PCAT
  2. **
  3. ** Harry Porter - 11/4/98
  4. *)
  5.  
  6. prog = program is body ;
  7. body = decls begin stmts end
  8. decls = decls decl
  9. decls =
  10. decl = var varDecls
  11. decl = type typeDecls
  12. decl = procedure procDecls
  13. varDecls = varDecls varDecl
  14. varDecls =
  15. varDecl = idList optionalType := expr ;
  16. idList = idList , ID
  17. idList = ID
  18. optionalType = : type2
  19. optionalType =
  20. typeDecls = typeDecls typeDecl
  21. typeDecls =
  22. typeDecl = ID is type2 ;
  23. procDecls = procDecls procDecl
  24. procDecls =
  25. procDecl = ID formalParams optionalType is body ;
  26. type2 = ID
  27. type2 = array of type2
  28. type2 = record components end
  29. components = components component
  30. components = component
  31. component = ID : type2 ;
  32. formalParams = ( )
  33. formalParams = ( fpSections )
  34. fpSections = fpSections ; fpSection
  35. fpSections = fpSection
  36. fpSection = idList : type2
  37. stmts = stmts stmt
  38. stmts =
  39. stmt = lValue := expr ;
  40. stmt = ID actualParams ;
  41. stmt = read ( lValue lValues ) ;
  42. stmt = write writeParams ;
  43. stmt = if expr then stmts elseIfs optionalElse end ;
  44. stmt = while expr do stmts end ;
  45. stmt = loop stmts end ;
  46. stmt = for ID := expr to expr optionalBy do stmts end ;
  47. stmt = exit ;
  48. stmt = return optionalExpr ;
  49. writeParams = ( )
  50. writeParams = ( writeExprs )
  51. writeExprs = writeExprs , writeExpr
  52. writeExprs = writeExpr
  53. writeExpr = "any string"
  54. writeExpr = expr
  55. optionalElse = else stmts
  56. optionalElse =
  57. elseIfs = elseif expr then stmts elseIfs
  58. elseIfs =
  59. optionalBy = by expr
  60. optionalBy =
  61. optionalExpr = expr
  62. optionalExpr =
  63. expr = expr2 moreExpr2
  64. moreExpr2 = moreExpr2 binaryOp2 expr2
  65. moreExpr2 =
  66. expr2 = expr3 moreExpr3
  67. moreExpr3 = moreExpr3 binaryOp3 expr3
  68. moreExpr3 =
  69. expr3 = expr4 moreExpr4
  70. moreExpr4 = moreExpr4 binaryOp4 expr4
  71. moreExpr4 =
  72. expr4 = unaryOp expr4
  73. expr4 = expr5
  74. expr5 = 123
  75. expr5 = 123.321
  76. expr5 = lValue
  77. expr5 = ( expr )
  78. expr5 = ID actualParams
  79. expr5 = ID compValues
  80. expr5 = ID arrayValues
  81. lValues = , lValue lValues
  82. lValues =
  83. lValue = ID
  84. lValue = lValue [ expr ]
  85. lValue = lValue . ID
  86. actualParams = ( )
  87. actualParams = ( actuals )
  88. actuals = actuals , expr
  89. actuals = expr
  90. compValues = { ID := expr moreCompValues }
  91. moreCompValues = moreCompValues ; ID := expr
  92. moreCompValues =
  93. arrayValues = [< arrayValue moreArrayValues >]
  94. moreArrayValues = moreArrayValues , arrayValue
  95. moreArrayValues =
  96. arrayValue = expr
  97. arrayValue = expr of expr
  98. unaryOp = +
  99. unaryOp = -
  100. unaryOp = not
  101. binaryOp2 = >
  102. binaryOp2 = <
  103. binaryOp2 = =
  104. binaryOp2 = >=
  105. binaryOp2 = <=
  106. binaryOp2 = <>
  107. binaryOp3 = +
  108. binaryOp3 = -
  109. binaryOp3 = or
  110. binaryOp4 = *
  111. binaryOp4 = /
  112. binaryOp4 = div
  113. binaryOp4 = mod
  114. binaryOp4 = and
  115.  
  116.