(* Pasta80 Pascal-S ATG for Coco/R *) (* Ported from Arzu/Terry Coco/R-Turbo Pascal-S (1996-97); actions and attributes stripped for V1.53 *) COMPILER Pasta80 IGNORE CASE IGNORE CHR(1) .. CHR(32) COMMENTS FROM "(*" TO "*)" COMMENTS FROM "{" TO "}" CHARACTERS digit = "0123456789" . letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . noQuote1 = ANY - "'" - CHR(13) . TOKENS ident = letter { letter | digit } . pnumber = digit { digit } | digit { digit } CONTEXT ( ".." ) . preal = digit { digit } "." digit { digit } | digit { digit } "." digit { digit } "E" [ "+" | "-" ] digit { digit } . pstring = "'" { noQuote1 | "''" } "'" . PRODUCTIONS Pasta80 = "PROGRAM" Ident [ "(" ident {"," ident } ")" ] Block "." . Block = [ "(" ParameterList ")" ] [ ":" Ident ] ";" { ConstDecl | TypeDecl | VarDecl | ProcDecl } SYNC "BEGIN" [ Statement { ";" [ Statement ] } ] "END" . Statement = AssignCallStat | CompStat | CaseStat | IfStat | WhileStat | RepeatStat | ForStat | StandardProc . AssignCallStat = Ident { Selector } ( ":=" Expression | [ ActualParams ] ) . CompStat = "BEGIN" [ Statement { ";" [ Statement ] } ] "END" . IfStat = "IF" Expression "THEN" Statement ( "ELSE" Statement | (* empty *) ) . RepeatStat = "REPEAT" [ Statement { ";" [ Statement ] } ] "UNTIL" Expression . WhileStat = "WHILE" Expression "DO" Statement . ForStat = "FOR" Ident ":=" Expression ( "TO" | "DOWNTO" ) Expression "DO" Statement . StandardProc = "READ" [ "(" ReadArg {"," ReadArg} ")" ] | "READLN" [ "(" ReadArg {"," ReadArg} ")" ] | "WRITE" [ "(" WriteArg {"," WriteArg} ")" ] | "WRITELN" [ "(" WriteArg {"," WriteArg} ")" ] . CaseStat = "CASE" Expression "OF" [ CaseItem { ";" [ CaseItem ] } ] "END" . CaseItem = CaseLabels ":" Statement . CaseLabels = CaseLabel { "," CaseLabel } . CaseLabel = pnumber | ident | pstring . ReadArg = Ident { Selector } . WriteArg = Expression [ ":" Expression [ ":" Expression ] ] . Selector = "." Ident | "[" Expression { "," Expression } "]" . ActualParams = "(" Expression { "," Expression } ")" . Expression = SimpExpr { RelOp SimpExpr } . SimpExpr = [ "+" | "-" ] Term { AddOp Term } . Term = Factor { MultOp Factor } . Factor = Ident ( Selector { Selector } | ActualParams | (*empty bug fix pdt *) ) | RealConst | IntConst | ChrConst | "(" Expression ")" | "NOT" Factor . RelOp = "=" | "<>" | "<" | "<=" | ">" | ">=" . AddOp = "+" | "-" | "OR" . MultOp = "DIV" | "MOD" | "AND" | "/" | "*" . ProcDecl = ( "PROCEDURE" Ident | "FUNCTION" Ident ) Block ";" . VarDecl = "VAR" { Ident { "," Ident } ":" Typ ";" } . ArrayTyp = Const ".." Const ( "," ArrayTyp | "]" "OF" Typ ) . Typ = Ident | "ARRAY" "[" ArrayTyp | "RECORD" [ RecField { ";" [ RecField ] } ] "END" . ParameterList = ParameterItem { ";" [ ParameterItem ] } . RecField = Ident { "," Ident } ":" Typ . ParameterItem = ("VAR" | ) Ident { "," Ident } ":" Ident . ConstDecl = "CONST" { Ident "=" Const ";" } . TypeDecl = "TYPE" { Ident "=" Typ ";" } . Const = ( ChrConst | [ "+" | "-" ] ( Ident | IntConst | RealConst ) ) . Ident = ident . IntConst = pnumber . RealConst = preal . ChrConst = pstring . END Pasta80.