html.atg 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. COMPILER HTML
  2. (* Attempt to describe a fairly large subset of HTML (HyperText Markup Language)
  3. This is incomplete, and parts are not properly described anyway!
  4. P.D. Terry and P.D. Koeslag, Rhodes University, 1995 *)
  5. IGNORE CASE
  6. IGNORE CHR(1) .. CHR(13)
  7. CHARACTERS
  8. eol = CHR(13) .
  9. Special = '<>&"=' .
  10. Letter = CHR(33) .. CHR(255) - Special.
  11. Noquote = ANY - '"' - eol.
  12. TOKENS
  13. Word = Letter { Letter } .
  14. String = '"' { Noquote } '"' .
  15. PRODUCTIONS
  16. HTML = ( "<HTML>" HeadPart BodyPart "</HTML>"
  17. | HeadPart BodyPart ) EOF .
  18. HeadPart = "<HEAD>" TitleField "</HEAD>" | TitleField .
  19. BodyPart = "<BODY>" { Field } "</BODY>" | { Field } .
  20. TitleField = "<TITLE>" { TextOrImage } "</TITLE>" .
  21. (* Or should this be simply
  22. TitleField = "<TITLE>" { InlineText } "</TITLE>" .
  23. *)
  24. Field = Heading | Anchor | UnNumList | NumList | Address |
  25. Paragraph | DefList | PreFormatted | TextOrImage .
  26. Heading = ("<H1" Alignment ">" { TextOrImage } "</H1>") |
  27. ("<H2" Alignment ">" { TextOrImage } "</H2>") |
  28. ("<H3" Alignment ">" { TextOrImage } "</H3>") |
  29. ("<H4" Alignment ">" { TextOrImage } "</H4>") .
  30. Alignment = [ "ALIGN" "=" ( "TOP" | "MIDDLE" | "CENTER" ) ] .
  31. Anchor = "<A" ( "HREF" | "NAME" ) "=" FilePath ">"
  32. TextOrImage { TextOrImage } "</A>" .
  33. FilePath = Word | String .
  34. TextOrImage = InlineText | Image .
  35. UnNumList = "<UL>" { ListElement } "</UL>" .
  36. NumList = "<OL>" { ListElement } "</OL>" .
  37. ListElement = "<LI>" { Field } .
  38. Address = "<ADDRESS>" InlineText { InlineText } "</ADDRESS>" .
  39. Format = "<DFN>" { InlineText } "</DFN>"
  40. | "<EM>" { InlineText } "</EM>"
  41. | "<CITE>" { InlineText } "</CITE>"
  42. | "<CODE>" { InlineText } "</CODE>"
  43. | "<STRONG>" { InlineText } "</STRONG>" .
  44. Paragraph = "<P" Alignment ">" .
  45. DefList = "<DL>" DefListElement { DefListElement } "</DL>" .
  46. DefListElement = "<DT>" { Field } "<DD>" { Field } .
  47. PreFormatted = "<PRE>" { InlineText } "</PRE>" .
  48. Image = "<IMG" Alignment "SRC" "=" FilePath Alignment
  49. [ "ALT" "=" String ] ">" .
  50. InlineText = Word | String | Escape | Control | Format .
  51. Escape = "&lt;" | "&gt;" | "&amp;" | "&quot;" .
  52. Control = "</P>" | "<BR>" | "<HR>" | "=" |
  53. "ALIGN" | "HREF" | "NAME" | "TOP" | "MIDDLE" | "CENTER" .
  54. END HTML.