Advertisement
Guest User

Untitled

a guest
May 8th, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.09 KB | None | 0 0
  1. grammar dreme::datum::Grammar;
  2.  
  3. token TOP {
  4.     <datum>
  5.     [ $ || <.panic: "Syntax error"> ]
  6. }
  7.  
  8. ## Lexer items
  9.  
  10. # This <ws> rule treats # as "comment to eol".
  11. token ws {
  12.     <!ww>
  13.     <comment>*
  14. }
  15.  
  16. token comment {
  17.     | <line_comment>
  18.     | <nested_comment>
  19. }
  20.  
  21. token line_comment {
  22.     ';' \N* \n?
  23. }
  24.  
  25. token nested_comment {
  26.     '#|' ~ '|#' .
  27. }
  28.  
  29. ## Data
  30.  
  31. rule datum {
  32.     | <simple_datum>
  33.     | <compound_datum>
  34. }
  35.  
  36. rule simple_datum {
  37.     | <boolean>
  38.     | <character>
  39.     | <number>
  40.     | <string>
  41.     | <symbol>
  42.     | <bytevector>
  43. }
  44.  
  45. rule compound_datum {
  46.     | <list>
  47.     | <vector>
  48. }
  49.  
  50. rule symbol { <identifier> }
  51.  
  52. rule list {
  53.     | '(' ~ ')' <list_data>
  54.     | '[' ~ ']' <list_data> # R6RS
  55. }
  56.  
  57. rule list_data {
  58.     | <datum>*
  59.     | <datum>+ '.' <datum>
  60.     | <datum> '.' <datum> '.' <datum> # Racket
  61. }
  62.  
  63. rule abbreviation {
  64.     | "'" <datum>
  65.     | '`' <datum>
  66.     | ',' <datum>
  67.     | ',@' <datum>
  68. }
  69.  
  70. rule vector {
  71.     '#' '(' ~ ')' <datum>*
  72. }
  73.  
  74. token bytevector_hash {
  75.     | '#vu8' # R6RS
  76.     | '#u8'  # R7RS
  77. }
  78.  
  79. rule bytevector {
  80.     <bytevector_hash> '(' ~ ')' <u8>
  81. }
  82.  
  83. token u8 {
  84.     \d**1..3 <?{$/ < 256}>
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement