pasta80.atg 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. (* Pasta80 Pascal-S ATG for Coco/R *)
  2. (* Ported from Arzu/Terry Coco/R-Turbo Pascal-S (1996-97);
  3. actions and attributes stripped for V1.53 *)
  4. COMPILER Pasta80
  5. IGNORE CASE
  6. IGNORE CHR(1) .. CHR(32)
  7. COMMENTS FROM "(*" TO "*)"
  8. COMMENTS FROM "{" TO "}"
  9. CHARACTERS
  10. digit = "0123456789" .
  11. letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .
  12. noQuote1 = ANY - "'" - CHR(13) .
  13. TOKENS
  14. ident = letter { letter | digit } .
  15. pnumber = digit { digit } | digit { digit } CONTEXT ( ".." ) .
  16. preal = digit { digit } "." digit { digit }
  17. | digit { digit } "." digit { digit } "E" [ "+" | "-" ] digit { digit } .
  18. pstring = "'" { noQuote1 | "''" } "'" .
  19. PRODUCTIONS
  20. Pasta80
  21. =
  22. "PROGRAM" Ident
  23. [ "(" ident {"," ident }
  24. ")"
  25. ]
  26. Block
  27. "."
  28. .
  29. Block
  30. =
  31. [ "(" ParameterList
  32. ")" ]
  33. [ ":" Ident
  34. ]
  35. ";"
  36. { ConstDecl
  37. | TypeDecl
  38. | VarDecl
  39. | ProcDecl
  40. }
  41. SYNC
  42. "BEGIN"
  43. [ Statement
  44. { ";" [ Statement ] } ]
  45. "END"
  46. .
  47. Statement
  48. = AssignCallStat
  49. | CompStat
  50. | CaseStat
  51. | IfStat
  52. | WhileStat
  53. | RepeatStat
  54. | ForStat
  55. | StandardProc
  56. .
  57. AssignCallStat
  58. =
  59. Ident
  60. { Selector }
  61. ( ":=" Expression
  62. |
  63. [ ActualParams ]
  64. )
  65. .
  66. CompStat
  67. = "BEGIN" [ Statement { ";" [ Statement ] } ] "END" .
  68. IfStat
  69. = "IF" Expression
  70. "THEN" Statement
  71. ( "ELSE"
  72. Statement
  73. | (* empty *)
  74. )
  75. .
  76. RepeatStat
  77. = "REPEAT"
  78. [ Statement { ";" [ Statement ] } ]
  79. "UNTIL"
  80. Expression
  81. .
  82. WhileStat
  83. = "WHILE"
  84. Expression
  85. "DO"
  86. Statement
  87. .
  88. ForStat
  89. = "FOR" Ident
  90. ":=" Expression
  91. ( "TO"
  92. | "DOWNTO"
  93. )
  94. Expression
  95. "DO"
  96. Statement
  97. .
  98. StandardProc
  99. = "READ" [ "(" ReadArg {"," ReadArg} ")" ]
  100. | "READLN" [ "(" ReadArg {"," ReadArg} ")" ]
  101. | "WRITE" [ "(" WriteArg {"," WriteArg} ")" ]
  102. | "WRITELN" [ "(" WriteArg {"," WriteArg} ")" ]
  103. .
  104. CaseStat = "CASE" Expression "OF" [ CaseItem { ";" [ CaseItem ] } ] "END" .
  105. CaseItem = CaseLabels ":" Statement .
  106. CaseLabels = CaseLabel { "," CaseLabel } .
  107. CaseLabel = pnumber | ident | pstring .
  108. ReadArg
  109. = Ident
  110. { Selector }
  111. .
  112. WriteArg = Expression [ ":" Expression [ ":" Expression ] ] .
  113. Selector
  114. = "." Ident
  115. | "["
  116. Expression
  117. { ","
  118. Expression
  119. }
  120. "]"
  121. .
  122. ActualParams
  123. = "("
  124. Expression
  125. { ","
  126. Expression
  127. }
  128. ")"
  129. .
  130. Expression
  131. = SimpExpr
  132. { RelOp
  133. SimpExpr
  134. }
  135. .
  136. SimpExpr
  137. =
  138. [ "+" | "-"
  139. ]
  140. Term
  141. { AddOp
  142. Term
  143. }
  144. .
  145. Term
  146. = Factor
  147. { MultOp
  148. Factor
  149. }
  150. .
  151. Factor
  152. =
  153. Ident
  154. ( Selector
  155. { Selector
  156. }
  157. | ActualParams
  158. | (*empty bug fix pdt *)
  159. )
  160. | RealConst
  161. | IntConst
  162. | ChrConst
  163. | "(" Expression ")"
  164. | "NOT" Factor
  165. .
  166. RelOp
  167. = "="
  168. | "<>"
  169. | "<"
  170. | "<="
  171. | ">"
  172. | ">="
  173. .
  174. AddOp
  175. = "+"
  176. | "-"
  177. | "OR"
  178. .
  179. MultOp
  180. = "DIV"
  181. | "MOD"
  182. | "AND"
  183. | "/"
  184. | "*"
  185. .
  186. ProcDecl
  187. = (
  188. "PROCEDURE" Ident
  189. | "FUNCTION" Ident
  190. )
  191. Block
  192. ";"
  193. .
  194. VarDecl
  195. = "VAR"
  196. {
  197. Ident
  198. { "," Ident
  199. }
  200. ":" Typ
  201. ";"
  202. }
  203. .
  204. ArrayTyp
  205. =
  206. Const
  207. ".." Const
  208. ( "," ArrayTyp
  209. | "]" "OF" Typ
  210. )
  211. .
  212. Typ
  213. =
  214. Ident
  215. | "ARRAY" "[" ArrayTyp
  216. | "RECORD"
  217. [ RecField { ";" [ RecField ] } ]
  218. "END"
  219. .
  220. ParameterList
  221. = ParameterItem
  222. { ";" [ ParameterItem ] }
  223. .
  224. RecField = Ident { "," Ident } ":" Typ .
  225. ParameterItem
  226. =
  227. ("VAR"
  228. |
  229. )
  230. Ident
  231. { "," Ident
  232. }
  233. ":"
  234. Ident
  235. .
  236. ConstDecl
  237. = "CONST"
  238. { Ident
  239. "="
  240. Const
  241. ";"
  242. }
  243. .
  244. TypeDecl
  245. = "TYPE"
  246. { Ident
  247. "="
  248. Typ
  249. ";"
  250. }
  251. .
  252. Const
  253. =
  254. (
  255. ChrConst
  256. | [ "+" | "-"
  257. ]
  258. ( Ident
  259. | IntConst
  260. | RealConst
  261. )
  262. )
  263. .
  264. Ident
  265. = ident
  266. .
  267. IntConst
  268. = pnumber
  269. .
  270. RealConst = preal .
  271. ChrConst
  272. = pstring
  273. .
  274. END Pasta80.