package main type URN Peg { } URN <- URN_PREFIX NID colon NSS eot URN_PREFIX <- "urn" colon NID <- LET_NUM LET_NUM_HYP? NSS <- CHARS+ LET_NUM <- upper+ / lower+ / number+ LET_NUM_HYP <- LET_NUM / hyp CHARS <- TRANS / perc HEX HEX TRANS <- LET_NUM / OTHER / RESERVED HEX <- number+ / [A-F]+ / [a-f]+ OTHER <- '(' / ')' / '+' / ',' / hyp / '.' / colon / '=' / '@' / ';' / '$' / '_' / '!' / '*' / '\'' RESERVED <- perc / '/' / '?' / '#' colon <- ':' eot <- !. upper <- [A-Z] lower <- [a-z] number <- [0-9] hyp <- '-' perc <- '%'