clang1.atg 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. COMPILER Clang1
  2. (* Simple CLANG level 1 parser.
  3. See "Programming Language Translation" by P.D. Terry (Addison Wesley 1986) *)
  4. IGNORE CASE
  5. CHARACTERS
  6. eol = CHR(13) .
  7. letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
  8. digit = "0123456789" .
  9. noquote1 = ANY - "'" - eol .
  10. noquote2 = ANY - '"' - eol .
  11. IGNORE CHR(9) .. CHR(13)
  12. TOKENS
  13. identifier = letter {letter | digit} .
  14. number = digit { digit} .
  15. string = "'" noquote1 {noquote1} "'" | '"' noquote2 {noquote2} '"' .
  16. PRODUCTIONS
  17. Clang1 = "PROGRAM" ProgIdentifier ";"
  18. Block "." .
  19. Block = [ ConstDeclarations ] [ VarDeclarations ]
  20. { (. Error(90) .)
  21. ( ConstDeclarations | VarDeclarations )
  22. }
  23. CompoundStatement .
  24. ConstDeclarations = "CONST"
  25. ConstIdentifier "=" number ";" SYNC
  26. { ConstIdentifier "=" number ";" SYNC } .
  27. VarDeclarations = "VAR"
  28. VarIdentifier { WEAK "," VarIdentifier } ";" SYNC .
  29. CompoundStatement = "BEGIN"
  30. Statement { WEAK ";" Statement }
  31. "END" .
  32. Statement = SYNC [ CompoundStatement | Assignment
  33. | IfStatement | WhileStatement
  34. | WriteStatement | ReadStatement ] .
  35. Assignment = VarDesignator ":=" Expression .
  36. IfStatement = "IF" Condition "THEN" Statement .
  37. WhileStatement = "WHILE" Condition "DO" Statement .
  38. WriteStatement = "WRITE" [ "(" WriteList ")" ] .
  39. ReadStatement = "READ" "(" VarDesignator { "," VarDesignator } ")" .
  40. Condition = "ODD" "(" Expression ")"
  41. | Expression RelOp Expression SYNC .
  42. WriteList = ( Expression | string ) { "," ( Expression | string ) }.
  43. Expression = SYNC ( Term | "+" Term | "-" Term) { AddOp Term } .
  44. Term = Factor { MulOp Factor } .
  45. Factor = SYNC (identifier | number | "(" Expression ")" ) .
  46. VarDesignator = VarIdentifier .
  47. AddOp = "+" | "-" .
  48. MulOp = "*" | "/" .
  49. RelOp = "=" | "<>" | "<" | "<=" | ">" | ">=" .
  50. ProgIdentifier = identifier .
  51. VarIdentifier = identifier .
  52. ConstIdentifier = identifier .
  53. END Clang1.