urn.peg 548 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package main
  2. type URN Peg {
  3. }
  4. URN <- URN_PREFIX NID colon NSS eot
  5. URN_PREFIX <- "urn" colon
  6. NID <- LET_NUM LET_NUM_HYP?
  7. NSS <- CHARS+
  8. LET_NUM <- upper+ / lower+ / number+
  9. LET_NUM_HYP <- LET_NUM / hyp
  10. CHARS <- TRANS / perc HEX HEX
  11. TRANS <- LET_NUM / OTHER / RESERVED
  12. HEX <- number+ / [A-F]+ / [a-f]+
  13. OTHER <- '(' / ')' / '+' / ',' / hyp / '.' / colon / '=' / '@' / ';' / '$' / '_' / '!' / '*' / '\''
  14. RESERVED <- perc / '/' / '?' / '#'
  15. colon <- ':'
  16. eot <- !.
  17. upper <- [A-Z]
  18. lower <- [a-z]
  19. number <- [0-9]
  20. hyp <- '-'
  21. perc <- '%'