Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. start = rules:rules { return rules; }
  2.  
  3. rules = rule+
  4.  
  5. rule =
  6. n:number? _ rule:parts {
  7. return {n:n, rule:rule}
  8. }
  9.  
  10. number = "[" n:digits "]" { return n; }
  11.  
  12. parts = name:symbol _ "::=" _ expression:expression _r? { return {name:name, expression:expression} }
  13.  
  14. symbol = chars:[A-Za-z]+ { return chars.join("") }
  15.  
  16. expression = (term _)+
  17.  
  18. term = terminal / symbol modifier?
  19.  
  20. terminal = quote chars:chars quote { return chars;}
  21.  
  22. chars
  23. = chars:char+ { return chars.join(""); }
  24.  
  25. char
  26. = [^"\\\0-\x1F\x7f]
  27.  
  28. quote
  29. = "'" / '"'
  30.  
  31. modifier = op:("+" / "*"/ "?") {return op;}
  32.  
  33. digits = chars:[0-9]+ { return chars.join("") }
  34.  
  35. _ "whitespace"
  36. = whitespace*
  37.  
  38. whitespace
  39. = [ \t]
  40.  
  41. _r
  42. = [ \t\r\n]+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement