pubid 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/data/ieee/update_codes.yaml +2 -2
  3. data/data/parg/aiee.json +1 -1
  4. data/data/parg/aiee.parg +99 -9
  5. data/data/parg/iala.json +1 -1
  6. data/data/parg/ieee.json +1 -1
  7. data/data/parg/ire.json +1 -1
  8. data/data/parg/ire.parg +51 -12
  9. data/data/parg/iso.json +1 -1
  10. data/data/parg/iso.parg +751 -0
  11. data/data/parg/jis.json +1 -1
  12. data/data/parg/nesc.json +1 -1
  13. data/data/parg/nesc.parg +97 -12
  14. data/data/parg/parg.json +1 -1
  15. data/lib/pubid/iala/builder.rb +48 -39
  16. data/lib/pubid/iala/identifier.rb +1 -1
  17. data/lib/pubid/ieee/CLAUDE.md +2 -0
  18. data/lib/pubid/ieee/aiee/identifier.rb +1 -1
  19. data/lib/pubid/ieee/builder.rb +175 -28
  20. data/lib/pubid/ieee/components/code.rb +46 -7
  21. data/lib/pubid/ieee/identifiers/base.rb +4 -1
  22. data/lib/pubid/ieee/identifiers/joint_development.rb +7 -3
  23. data/lib/pubid/ieee/ire/identifier.rb +1 -1
  24. data/lib/pubid/ieee/nesc/builder.rb +1 -1
  25. data/lib/pubid/ieee/project_renderer.rb +5 -1
  26. data/lib/pubid/ieee/renderer.rb +4 -2
  27. data/lib/pubid/ieee/urn_generator.rb +4 -1
  28. data/lib/pubid/iho/CLAUDE.md +15 -6
  29. data/lib/pubid/iho/urn_generator.rb +9 -6
  30. data/lib/pubid/iho/urn_parser.rb +43 -40
  31. data/lib/pubid/iso/CLAUDE.md +66 -0
  32. data/lib/pubid/iso/builder.rb +228 -14
  33. data/lib/pubid/iso/identifier.rb +22 -12
  34. data/lib/pubid/iso/normalizer.rb +5 -4
  35. data/lib/pubid/iso/urn_parser.rb +13 -8
  36. data/lib/pubid/jis/CLAUDE.md +36 -0
  37. data/lib/pubid/jis/builder.rb +12 -12
  38. data/lib/pubid/jis/identifier.rb +11 -1
  39. data/lib/pubid/jis/identifiers/welding_engineering_standard.rb +35 -0
  40. data/lib/pubid/jis/identifiers.rb +2 -0
  41. data/lib/pubid/jis/renderer.rb +1 -1
  42. data/lib/pubid/jis/supplement_identifier.rb +5 -5
  43. data/lib/pubid/jis/urn_parser.rb +2 -1
  44. data/lib/pubid/jis.rb +3 -2
  45. data/lib/pubid/version.rb +1 -1
  46. metadata +9 -12
data/data/parg/jis.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidJis","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"JIS"}},{"Entity":{"atom":4}},{"Str":{"pattern":" "}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"space","atom":1}},{"Entity":{"atom":7}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":6}},{"Alternative":{"atoms":[5,8]}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,10]}},{"Repetition":{"atom":11,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":23}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"type","atom":16}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":18}},{"Entity":{"atom":7}},{"Named":{"name":"slash","atom":20}},{"Alternative":{"atoms":[19,21]}},{"Sequence":{"atoms":[17,22]}},{"Repetition":{"atom":13,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":25}},{"Repetition":{"atom":26,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":30}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Named":{"name":"series","atom":29}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":31}},{"Repetition":{"atom":32,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":36}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":35,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":37}},{"Entity":{"atom":51}},{"Entity":{"atom":49}},{"Entity":{"atom":45}},{"Str":{"pattern":"-"}},{"Str":{"pattern":"ー"}},{"Alternative":{"atoms":[42,43]}},{"Named":{"name":"dash","atom":44}},{"Entity":{"atom":36}},{"Repetition":{"atom":46,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":47}},{"Sequence":{"atoms":[41,48]}},{"Repetition":{"atom":40,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":50}},{"Entity":{"atom":67}},{"Entity":{"atom":56}},{"Str":{"pattern":":"}},{"Str":{"pattern":":"}},{"Alternative":{"atoms":[54,55]}},{"Named":{"name":"colon","atom":53}},{"Entity":{"atom":36}},{"Repetition":{"atom":58,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"year","atom":59}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":62,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[61,63]}},{"Repetition":{"atom":64,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"reaffirmed","atom":65}},{"Sequence":{"atoms":[57,60,66]}},{"Repetition":{"atom":52,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":80}},{"Str":{"pattern":"("}},{"Str":{"pattern":"("}},{"Alternative":{"atoms":[70,71]}},{"Str":{"pattern":"E"}},{"Str":{"pattern":"J"}},{"Alternative":{"atoms":[73,74]}},{"Named":{"name":"language","atom":75}},{"Str":{"pattern":")"}},{"Str":{"pattern":")"}},{"Alternative":{"atoms":[77,78]}},{"Sequence":{"atoms":[72,76,79]}},{"Repetition":{"atom":69,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":92}},{"Str":{"pattern":"("}},{"Str":{"pattern":"規格群"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[83,84,85]}},{"Str":{"pattern":"("}},{"Str":{"pattern":"規格群"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[87,88,89]}},{"Alternative":{"atoms":[86,90]}},{"Named":{"name":"all_parts","atom":91}},{"Repetition":{"atom":82,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":161}},{"Entity":{"atom":118}},{"Entity":{"atom":7}},{"Named":{"name":"slash","atom":96}},{"Str":{"pattern":"AMENDMENT"}},{"Str":{"pattern":"AMD"}},{"Alternative":{"atoms":[98,99]}},{"Named":{"name":"amd_type","atom":100}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":102}},{"Entity":{"atom":36}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":105}},{"Entity":{"atom":56}},{"Named":{"name":"colon","atom":107}},{"Entity":{"atom":36}},{"Repetition":{"atom":109,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":110}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":113,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[112,114]}},{"Repetition":{"atom":115,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"amd_reaffirmed","atom":116}},{"Sequence":{"atoms":[97,101,103,106,108,111,117]}},{"Named":{"name":"amendment","atom":95}},{"Entity":{"atom":134}},{"Entity":{"atom":7}},{"Named":{"name":"slash","atom":121}},{"Str":{"pattern":"EXPLANATION"}},{"Str":{"pattern":"EXPL"}},{"Alternative":{"atoms":[123,124]}},{"Named":{"name":"expl_type","atom":125}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":127}},{"Entity":{"atom":36}},{"Repetition":{"atom":129,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"expl_number","atom":130}},{"Sequence":{"atoms":[128,131]}},{"Repetition":{"atom":132,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[122,126,133]}},{"Named":{"name":"explanation","atom":120}},{"Entity":{"atom":159}},{"Entity":{"atom":7}},{"Named":{"name":"slash","atom":137}},{"Str":{"pattern":"CORRIGENDUM"}},{"Str":{"pattern":"CORR"}},{"Alternative":{"atoms":[139,140]}},{"Named":{"name":"corr_type","atom":141}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":143}},{"Entity":{"atom":36}},{"Repetition":{"atom":145,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"corr_number","atom":146}},{"Entity":{"atom":56}},{"Named":{"name":"colon","atom":148}},{"Entity":{"atom":36}},{"Repetition":{"atom":150,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"corr_year","atom":151}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":154,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[153,155]}},{"Repetition":{"atom":156,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"corr_reaffirmed","atom":157}},{"Sequence":{"atoms":[138,142,144,147,149,152,158]}},{"Named":{"name":"corrigendum","atom":136}},{"Alternative":{"atoms":[119,135,160]}},{"Repetition":{"atom":94,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":178}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":164}},{"Str":{"pattern":"SYMBOL"}},{"Named":{"name":"symbol_present","atom":166}},{"Entity":{"atom":4}},{"Named":{"name":"space","atom":168}},{"Entity":{"atom":173}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[171,172]}},{"Repetition":{"atom":170,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"symbol_value","atom":174}},{"Sequence":{"atoms":[169,175]}},{"Repetition":{"atom":176,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[165,167,177]}},{"Repetition":{"atom":163,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[12,24,27,28,33,34,39,68,81,93,162,179]}}],"root":180},"bindings":[{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"series","path":"series","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"part","path":"parts[].part","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"reaffirmed","path":"reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"language","path":"language","type":"string","card":null,"preprocess":null},{"capture":"all_parts","path":"all_parts","type":"string","card":null,"preprocess":null},{"capture":"amd_type","path":"amd_type","type":"string","card":null,"preprocess":null},{"capture":"amd_number","path":"amd_number","type":"string","card":null,"preprocess":null},{"capture":"amd_year","path":"amd_year","type":"string","card":null,"preprocess":null},{"capture":"amd_reaffirmed","path":"amd_reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"expl_type","path":"expl_type","type":"string","card":null,"preprocess":null},{"capture":"expl_number","path":"expl_number","type":"string","card":null,"preprocess":null},{"capture":"corr_type","path":"corr_type","type":"string","card":null,"preprocess":null},{"capture":"corr_number","path":"corr_number","type":"string","card":null,"preprocess":null},{"capture":"corr_year","path":"corr_year","type":"string","card":null,"preprocess":null},{"capture":"corr_reaffirmed","path":"corr_reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"symbol_present","path":"symbol_present","type":"string","card":null,"preprocess":null},{"capture":"symbol_value","path":"symbol_value","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule supplement: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule supplement: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule supplement: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule symbol_value_char: branches 1 and 2 are order-dependent (first set not statically known)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"JIS B 0001","expect":{}},{"entry":"identifier","kind":"accept","input":"JIS X 0208:1997","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/jis/parser.rb — JIS identifiers with the Japanese\n# full-width separator tolerance (ー   : ()), TR/TS prefixes, parts,\n# reaffirmed years, (E)/(J) language codes, 規格群 all-parts, AMD/EXPL/\n# CORR supplements, and the SYMBOL clause.\n\ngrammar PubidJis version \"0.1.0\" edition 2 {\n dash = (\"-\" / \"ー\") as dash\n space = (\" \" / \" \")\n colon = (\":\" / \":\")\n type_prefix = (\"TR\" / \"TS\") as type (space / slash)\n series = %x41-5A as series\n number = (1*digit) as number\n part = dash (1*digit) as part\n parts = (*part) as parts\n reaffirmed = \"R\" (*\"R\")\n year = colon (1*digit) as year ([\"R\" (*\"R\")]) as reaffirmed\n language = (\"(\" / \"(\") (\"E\" / \"J\") as language (\")\" / \")\")\n all_parts = ((\"(\" \"規格群\" \")\") / (\"(\" \"規格群\" \")\")) as all_parts\n amendment = slash (\"AMENDMENT\" / \"AMD\") as amd_type space (1*digit) as amd_number colon (1*digit) as amd_year ([\"R\" (*\"R\")]) as amd_reaffirmed\n explanation = slash (\"EXPLANATION\" / \"EXPL\") as expl_type ([space (1*digit) as expl_number])\n corrigendum = slash (\"CORRIGENDUM\" / \"CORR\") as corr_type space (1*digit) as corr_number colon (1*digit) as corr_year ([\"R\" (*\"R\")]) as corr_reaffirmed\n supplement = (amendment as amendment) / (explanation as explanation) / (corrigendum as corrigendum)\n symbol_value_char = %x01-09 / %x0B-10FFFF\n symbol_clause = space \"SYMBOL\" as symbol_present ([space (1*symbol_value_char) as symbol_value])\n identifier = [\"JIS\" [(space / slash)]] [type_prefix] [space] series [space] number parts [year] [language] [all_parts] [supplement] [symbol_clause]\n upper = %x41-5A\n digit = %x30-39\n slash = \"/\"\n entry identifier: identifier\n\n # Typed model bindings: bound captures land on the consumer\n # builder's fields of the same name; repeated parts collect under\n # parts[].part.\n bindings identifier {\n type -> type (string)\n series -> series (string)\n number -> number (string)\n part -> parts[].part (string)\n year -> year (string)\n reaffirmed -> reaffirmed (string)\n language -> language (string)\n all_parts -> all_parts (string)\n amd_type -> amd_type (string)\n amd_number -> amd_number (string)\n amd_year -> amd_year (string)\n amd_reaffirmed -> amd_reaffirmed (string)\n expl_type -> expl_type (string)\n expl_number -> expl_number (string)\n corr_type -> corr_type (string)\n corr_number -> corr_number (string)\n corr_year -> corr_year (string)\n corr_reaffirmed -> corr_reaffirmed (string)\n symbol_present -> symbol_present (string)\n symbol_value -> symbol_value (string)\n }\n\n \n test {\n accept \"JIS B 0001\"\n accept \"JIS X 0208:1997\"\n reject \"nonsense\"\n }\n}\n","source_hash":"211b6cea7445bbc8129a6608321fecd1baea1433600346f9fc4ab152cea69336","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:81ebe907b7b6bddda7bebbcdebf46317820b9e6e5b0c6dc5a941d5e5f9b43bb4"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidJis","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":155}},{"Str":{"pattern":"WES"}},{"Named":{"name":"wes","atom":1}},{"Entity":{"atom":6}},{"Str":{"pattern":" "}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[4,5]}},{"Named":{"name":"space","atom":3}},{"Entity":{"atom":12}},{"Entity":{"atom":10}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":9,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":11}},{"Entity":{"atom":25}},{"Entity":{"atom":23}},{"Entity":{"atom":19}},{"Str":{"pattern":"-"}},{"Str":{"pattern":"ー"}},{"Alternative":{"atoms":[16,17]}},{"Named":{"name":"dash","atom":18}},{"Entity":{"atom":10}},{"Repetition":{"atom":20,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":21}},{"Sequence":{"atoms":[15,22]}},{"Repetition":{"atom":14,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":24}},{"Entity":{"atom":41}},{"Entity":{"atom":30}},{"Str":{"pattern":":"}},{"Str":{"pattern":":"}},{"Alternative":{"atoms":[28,29]}},{"Named":{"name":"colon","atom":27}},{"Entity":{"atom":10}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"year","atom":33}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":36,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[35,37]}},{"Repetition":{"atom":38,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"reaffirmed","atom":39}},{"Sequence":{"atoms":[31,34,40]}},{"Repetition":{"atom":26,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Str":{"pattern":"("}},{"Str":{"pattern":"("}},{"Alternative":{"atoms":[44,45]}},{"Str":{"pattern":"E"}},{"Str":{"pattern":"J"}},{"Alternative":{"atoms":[47,48]}},{"Named":{"name":"language","atom":49}},{"Str":{"pattern":")"}},{"Str":{"pattern":")"}},{"Alternative":{"atoms":[51,52]}},{"Sequence":{"atoms":[46,50,53]}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":66}},{"Str":{"pattern":"("}},{"Str":{"pattern":"規格群"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[57,58,59]}},{"Str":{"pattern":"("}},{"Str":{"pattern":"規格群"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[61,62,63]}},{"Alternative":{"atoms":[60,64]}},{"Named":{"name":"all_parts","atom":65}},{"Repetition":{"atom":56,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":136}},{"Entity":{"atom":93}},{"Entity":{"atom":71}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":70}},{"Str":{"pattern":"AMENDMENT"}},{"Str":{"pattern":"AMD"}},{"Alternative":{"atoms":[73,74]}},{"Named":{"name":"amd_type","atom":75}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":77}},{"Entity":{"atom":10}},{"Repetition":{"atom":79,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":80}},{"Entity":{"atom":30}},{"Named":{"name":"colon","atom":82}},{"Entity":{"atom":10}},{"Repetition":{"atom":84,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":85}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":88,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[87,89]}},{"Repetition":{"atom":90,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"amd_reaffirmed","atom":91}},{"Sequence":{"atoms":[72,76,78,81,83,86,92]}},{"Named":{"name":"amendment","atom":69}},{"Entity":{"atom":109}},{"Entity":{"atom":71}},{"Named":{"name":"slash","atom":96}},{"Str":{"pattern":"EXPLANATION"}},{"Str":{"pattern":"EXPL"}},{"Alternative":{"atoms":[98,99]}},{"Named":{"name":"expl_type","atom":100}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":102}},{"Entity":{"atom":10}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"expl_number","atom":105}},{"Sequence":{"atoms":[103,106]}},{"Repetition":{"atom":107,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[97,101,108]}},{"Named":{"name":"explanation","atom":95}},{"Entity":{"atom":134}},{"Entity":{"atom":71}},{"Named":{"name":"slash","atom":112}},{"Str":{"pattern":"CORRIGENDUM"}},{"Str":{"pattern":"CORR"}},{"Alternative":{"atoms":[114,115]}},{"Named":{"name":"corr_type","atom":116}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":118}},{"Entity":{"atom":10}},{"Repetition":{"atom":120,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"corr_number","atom":121}},{"Entity":{"atom":30}},{"Named":{"name":"colon","atom":123}},{"Entity":{"atom":10}},{"Repetition":{"atom":125,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"corr_year","atom":126}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"R"}},{"Repetition":{"atom":129,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[128,130]}},{"Repetition":{"atom":131,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"corr_reaffirmed","atom":132}},{"Sequence":{"atoms":[113,117,119,122,124,127,133]}},{"Named":{"name":"corrigendum","atom":111}},{"Alternative":{"atoms":[94,110,135]}},{"Repetition":{"atom":68,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":153}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":139}},{"Str":{"pattern":"SYMBOL"}},{"Named":{"name":"symbol_present","atom":141}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":143}},{"Entity":{"atom":148}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[146,147]}},{"Repetition":{"atom":145,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"symbol_value","atom":149}},{"Sequence":{"atoms":[144,150]}},{"Repetition":{"atom":151,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[140,142,152]}},{"Repetition":{"atom":138,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[2,7,8,13,42,55,67,137,154]}},{"Entity":{"atom":199}},{"Str":{"pattern":"JIS"}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":158}},{"Entity":{"atom":71}},{"Named":{"name":"slash","atom":160}},{"Alternative":{"atoms":[159,161]}},{"Repetition":{"atom":162,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[157,163]}},{"Repetition":{"atom":164,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":176}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[167,168]}},{"Named":{"name":"type","atom":169}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":171}},{"Entity":{"atom":71}},{"Named":{"name":"slash","atom":173}},{"Alternative":{"atoms":[172,174]}},{"Sequence":{"atoms":[170,175]}},{"Repetition":{"atom":166,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":178}},{"Repetition":{"atom":179,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":183}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Named":{"name":"series","atom":182}},{"Entity":{"atom":6}},{"Named":{"name":"space","atom":184}},{"Repetition":{"atom":185,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":12}},{"Entity":{"atom":25}},{"Entity":{"atom":41}},{"Repetition":{"atom":189,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Repetition":{"atom":191,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":66}},{"Repetition":{"atom":193,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":136}},{"Repetition":{"atom":195,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":153}},{"Repetition":{"atom":197,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[165,177,180,181,186,187,188,190,192,194,196,198]}},{"Alternative":{"atoms":[0,156]}}],"root":200},"bindings":[{"capture":"wes","path":"wes","type":"string","card":null,"preprocess":null},{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"series","path":"series","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"part","path":"parts[].part","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"reaffirmed","path":"reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"language","path":"language","type":"string","card":null,"preprocess":null},{"capture":"all_parts","path":"all_parts","type":"string","card":null,"preprocess":null},{"capture":"amd_type","path":"amd_type","type":"string","card":null,"preprocess":null},{"capture":"amd_number","path":"amd_number","type":"string","card":null,"preprocess":null},{"capture":"amd_year","path":"amd_year","type":"string","card":null,"preprocess":null},{"capture":"amd_reaffirmed","path":"amd_reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"expl_type","path":"expl_type","type":"string","card":null,"preprocess":null},{"capture":"expl_number","path":"expl_number","type":"string","card":null,"preprocess":null},{"capture":"corr_type","path":"corr_type","type":"string","card":null,"preprocess":null},{"capture":"corr_number","path":"corr_number","type":"string","card":null,"preprocess":null},{"capture":"corr_year","path":"corr_year","type":"string","card":null,"preprocess":null},{"capture":"corr_reaffirmed","path":"corr_reaffirmed","type":"string","card":null,"preprocess":null},{"capture":"symbol_present","path":"symbol_present","type":"string","card":null,"preprocess":null},{"capture":"symbol_value","path":"symbol_value","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule supplement: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule supplement: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule supplement: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule symbol_value_char: branches 1 and 2 are order-dependent (first set not statically known)","rule identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"JIS B 0001","expect":{}},{"entry":"identifier","kind":"accept","input":"JIS X 0208:1997","expect":{}},{"entry":"identifier","kind":"accept","input":"WES 7700-1:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"WES 7301:2020R","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}},{"entry":"identifier","kind":"reject","input":"JIS WES 7700","expect":{}},{"entry":"identifier","kind":"reject","input":"WES X 7700","expect":{}}],"docs":{},"source":"# Port of lib/pubid/jis/parser.rb — JIS identifiers with the Japanese\n# full-width separator tolerance (ー   : ()), TR/TS prefixes, parts,\n# reaffirmed years, (E)/(J) language codes, 規格群 all-parts, AMD/EXPL/\n# CORR supplements, and the SYMBOL clause. WES (Japan Welding Engineering\n# Society) ids share the JIS tail but carry no series letter or JIS prefix.\n\ngrammar PubidJis version \"0.1.0\" edition 2 {\n dash = (\"-\" / \"ー\") as dash\n space = (\" \" / \" \")\n colon = (\":\" / \":\")\n type_prefix = (\"TR\" / \"TS\") as type (space / slash)\n series = %x41-5A as series\n number = (1*digit) as number\n part = dash (1*digit) as part\n parts = (*part) as parts\n reaffirmed = \"R\" (*\"R\")\n year = colon (1*digit) as year ([\"R\" (*\"R\")]) as reaffirmed\n language = (\"(\" / \"(\") (\"E\" / \"J\") as language (\")\" / \")\")\n all_parts = ((\"(\" \"規格群\" \")\") / (\"(\" \"規格群\" \")\")) as all_parts\n amendment = slash (\"AMENDMENT\" / \"AMD\") as amd_type space (1*digit) as amd_number colon (1*digit) as amd_year ([\"R\" (*\"R\")]) as amd_reaffirmed\n explanation = slash (\"EXPLANATION\" / \"EXPL\") as expl_type ([space (1*digit) as expl_number])\n corrigendum = slash (\"CORRIGENDUM\" / \"CORR\") as corr_type space (1*digit) as corr_number colon (1*digit) as corr_year ([\"R\" (*\"R\")]) as corr_reaffirmed\n supplement = (amendment as amendment) / (explanation as explanation) / (corrigendum as corrigendum)\n symbol_value_char = %x01-09 / %x0B-10FFFF\n symbol_clause = space \"SYMBOL\" as symbol_present ([space (1*symbol_value_char) as symbol_value])\n wes_identifier = \"WES\" as wes space number parts [year] [language] [all_parts] [supplement] [symbol_clause]\n jis_identifier = [\"JIS\" [(space / slash)]] [type_prefix] [space] series [space] number parts [year] [language] [all_parts] [supplement] [symbol_clause]\n identifier = wes_identifier / jis_identifier\n upper = %x41-5A\n digit = %x30-39\n slash = \"/\"\n entry identifier: identifier\n\n # Typed model bindings: bound captures land on the consumer\n # builder's fields of the same name; repeated parts collect under\n # parts[].part.\n bindings identifier {\n wes -> wes (string)\n type -> type (string)\n series -> series (string)\n number -> number (string)\n part -> parts[].part (string)\n year -> year (string)\n reaffirmed -> reaffirmed (string)\n language -> language (string)\n all_parts -> all_parts (string)\n amd_type -> amd_type (string)\n amd_number -> amd_number (string)\n amd_year -> amd_year (string)\n amd_reaffirmed -> amd_reaffirmed (string)\n expl_type -> expl_type (string)\n expl_number -> expl_number (string)\n corr_type -> corr_type (string)\n corr_number -> corr_number (string)\n corr_year -> corr_year (string)\n corr_reaffirmed -> corr_reaffirmed (string)\n symbol_present -> symbol_present (string)\n symbol_value -> symbol_value (string)\n }\n\n \n test {\n accept \"JIS B 0001\"\n accept \"JIS X 0208:1997\"\n accept \"WES 7700-1:2019\"\n accept \"WES 7301:2020R\"\n reject \"nonsense\"\n reject \"JIS WES 7700\"\n reject \"WES X 7700\"\n }\n}\n","source_hash":"cee4b9e9e0254a2e48e9c1bbc9b4c13684765434ddcd309b58be70a85611f798","unicode_tables":"onigmo (Ruby 3.4.10)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:67d1e26097f00ecaac49d17b5955421c1ee3969b4d25269c6b76ee58c8f102dc"}
data/data/parg/nesc.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidNesc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"nesc_identifier":{"root":"nesc_identifier","grammar":{"atoms":[{"Entity":{"atom":40}},{"Str":{"pattern":"Draft"}},{"Named":{"name":"draft","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":" "}},{"Entity":{"atom":12}},{"Entity":{"atom":9}},{"Str":{"pattern":"National Electrical Safety Code"}},{"Str":{"pattern":"National Electric Safety Code"}},{"Alternative":{"atoms":[7,8]}},{"Entity":{"atom":11}},{"Str":{"pattern":"NESC"}},{"Alternative":{"atoms":[6,10]}},{"Entity":{"atom":14}},{"Str":{"pattern":"(R)"}},{"Repetition":{"atom":13,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":17}},{"Str":{"pattern":","}},{"Entity":{"atom":4}},{"Entity":{"atom":33}},{"Str":{"pattern":"January"}},{"Str":{"pattern":"February"}},{"Str":{"pattern":"March"}},{"Str":{"pattern":"April"}},{"Str":{"pattern":"May"}},{"Str":{"pattern":"June"}},{"Str":{"pattern":"July"}},{"Str":{"pattern":"August"}},{"Str":{"pattern":"September"}},{"Str":{"pattern":"October"}},{"Str":{"pattern":"November"}},{"Str":{"pattern":"December"}},{"Alternative":{"atoms":[20,21,22,23,24,25,26,27,28,29,30,31]}},{"Named":{"name":"month","atom":32}},{"Entity":{"atom":4}},{"Entity":{"atom":38}},{"Entity":{"atom":37}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":36,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":35}},{"Sequence":{"atoms":[2,3,5,15,16,18,19,34,39]}},{"Entity":{"atom":71}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":42}},{"Entity":{"atom":4}},{"Str":{"pattern":"Proposals"}},{"Str":{"pattern":"Proposal"}},{"Alternative":{"atoms":[45,46]}},{"Entity":{"atom":4}},{"Str":{"pattern":"for"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":53}},{"Entity":{"atom":4}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":4}},{"Str":{"pattern":"of"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Entity":{"atom":14}},{"Repetition":{"atom":66,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[63,64,65,67,68]}},{"Repetition":{"atom":69,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[43,44,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,70]}},{"Entity":{"atom":96}},{"Entity":{"atom":9}},{"Entity":{"atom":14}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[73,75]}},{"Entity":{"atom":17}},{"Entity":{"atom":4}},{"Entity":{"atom":81}},{"Str":{"pattern":"C2"}},{"Named":{"name":"code","atom":80}},{"Entity":{"atom":83}},{"Str":{"pattern":"-"}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":84}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Entity":{"atom":93}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Redline"}},{"Alternative":{"atoms":[90,91]}},{"Named":{"name":"variant","atom":92}},{"Sequence":{"atoms":[86,87,88,89]}},{"Repetition":{"atom":94,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[76,77,78,79,82,85,95]}},{"Entity":{"atom":119}},{"Entity":{"atom":81}},{"Entity":{"atom":100}},{"Str":{"pattern":"."}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":101}},{"Entity":{"atom":100}},{"Sequence":{"atoms":[99,102,103]}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":106}},{"Entity":{"atom":83}},{"Sequence":{"atoms":[105,107,108]}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":111}},{"Entity":{"atom":114}},{"Str":{"pattern":"/"}},{"Sequence":{"atoms":[110,112,113]}},{"Alternative":{"atoms":[104,109,115]}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":117}},{"Sequence":{"atoms":[98,116,118]}},{"Entity":{"atom":141}},{"Entity":{"atom":81}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":123}},{"Entity":{"atom":17}},{"Repetition":{"atom":125,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[126,127]}},{"Repetition":{"atom":128,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":9}},{"Entity":{"atom":14}},{"Repetition":{"atom":131,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Entity":{"atom":14}},{"Repetition":{"atom":136,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[133,134,135,137,138]}},{"Repetition":{"atom":139,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[121,122,124,129,130,132,140]}},{"Entity":{"atom":191}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":143}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"full_name","atom":146}},{"Entity":{"atom":14}},{"Named":{"name":"name_registered","atom":148}},{"Repetition":{"atom":149,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Named":{"name":"paren_abbr","atom":153}},{"Entity":{"atom":14}},{"Named":{"name":"paren_registered","atom":155}},{"Repetition":{"atom":156,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[151,152,154,157,158]}},{"Repetition":{"atom":159,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[147,150,160]}},{"Entity":{"atom":11}},{"Named":{"name":"abbr","atom":162}},{"Entity":{"atom":14}},{"Named":{"name":"abbr_registered","atom":164}},{"Repetition":{"atom":165,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[163,166]}},{"Alternative":{"atoms":[161,167]}},{"Entity":{"atom":4}},{"Entity":{"atom":93}},{"Sequence":{"atoms":[169,170]}},{"Repetition":{"atom":171,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":17}},{"Entity":{"atom":4}},{"Entity":{"atom":188}},{"Str":{"pattern":"Premier Edition"}},{"Str":{"pattern":"Second Edition"}},{"Str":{"pattern":"Third Edition"}},{"Str":{"pattern":"Fourth Edition"}},{"Str":{"pattern":"Fifth Edition"}},{"Str":{"pattern":"Sixth Edition"}},{"Str":{"pattern":"Seventh Edition"}},{"Str":{"pattern":"Eighth Edition"}},{"Str":{"pattern":"Ninth Edition"}},{"Str":{"pattern":"Tenth Edition"}},{"Str":{"pattern":"First Edition"}},{"Alternative":{"atoms":[176,177,178,179,180,181,182,183,184,185,186]}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[173,174,175]}},{"Repetition":{"atom":189,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[144,145,168,172,190]}},{"Alternative":{"atoms":[0,41,72,97,120,142]}}],"root":192},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nesc_full_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"nesc_identifier","render":{},"derive":{},"tests":[{"entry":"nesc_identifier","kind":"accept","input":"C2-2023 National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"2023 NESC","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"National Electrical Safety Code, C2-2017","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Draft NESC, January 2016","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2.2012.Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2012-Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2002/Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))","expect":{}},{"entry":"nesc_identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ieee/nesc/parser.rb — National Electrical Safety\n# Code designations: C2-year, year-first, name-first and Draft forms\n# with (R) marks, editions and variants. Consumed by the ieee grammar\n# via `use nesc`.\n\ngrammar PubidNesc version \"0.1.0\" mode \"v1\" {\n digit = %x30-39\n digits = 1*digit\n space = \" \"\n comma = \",\"\n dash = \"-\"\n dot = \".\"\n slash = \"/\"\n\n year = 4digit\n c2_code = \"C2\" as code\n nesc_full_name = \"National Electrical Safety Code\" / \"National Electric Safety Code\"\n nesc_abbr = \"NESC\"\n nesc_name = nesc_full_name / nesc_abbr\n registered = \"(R)\"\n edition = (\"Premier Edition\" / \"Second Edition\" / \"Third Edition\" / \"Fourth Edition\" / \"Fifth Edition\" / \"Sixth Edition\" / \"Seventh Edition\" / \"Eighth Edition\" / \"Ninth Edition\" / \"Tenth Edition\" / \"First Edition\") as edition\n variant = (\"Handbook\" / \"Redline\") as variant\n month = (\"January\" / \"February\" / \"March\" / \"April\" / \"May\" / \"June\" / \"July\" / \"August\" / \"September\" / \"October\" / \"November\" / \"December\") as month\n\n c2_standard = (c2_code dash (year) as year [([comma] space)] nesc_full_name [registered] [(space \"(\" nesc_abbr [registered] \")\")])\n year_first = ((year) as year) space (((nesc_full_name) as full_name [(registered) as name_registered] [(space \"(\" (nesc_abbr) as paren_abbr [(registered) as paren_registered] \")\")]) / (((nesc_abbr) as abbr [(registered) as abbr_registered]))) [(space variant)] [(comma space edition)]\n name_first = ((nesc_full_name [registered]) comma space c2_code dash (year) as year [(space \"-\" space variant)])\n draft_nesc = ((\"Draft\") as draft space nesc_name [registered] comma space (month) space (year) as year)\n # Preprint is a draft STAGE of the C2 code (NESC terminology for its\n # pre-edition drafts), not a variant: dotted is the canonical spelling\n # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's\n # slash tail (C2-2002/Preprint) are aliases. The verbose\n # \"Preprint Proposal(s) for the YYYY Edition of ...\" forms cite the same\n # draft by its target edition year.\n c2_preprint = (c2_code ((dot (year) as year dot) / (dash (year) as year dash) / (dash (year) as year slash)) (\"Preprint\") as preprint)\n preprint_proposal = ((\"Preprint\") as preprint space (\"Proposals\" / \"Proposal\") space \"for\" space \"the\" space (year) as year space \"Edition\" space \"of\" space \"the\" space nesc_full_name [(space \"(\" nesc_abbr [registered] \")\")])\n nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first\n\n entry nesc_identifier: nesc_identifier\n\n test {\n accept \"C2-2023 National Electrical Safety Code\"\n accept \"2023 NESC\"\n accept \"National Electrical Safety Code, C2-2017\"\n accept \"Draft NESC, January 2016\"\n accept \"C2.2012.Preprint\"\n accept \"C2-2012-Preprint\"\n accept \"C2-2002/Preprint\"\n accept \"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code\"\n accept \"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))\"\n reject \"nonsense\"\n }\n}\n","source_hash":"07550149202698984f686873c2ddb51f4a41d23b872b151129b176e9c4ed9552","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":1,"checksum":"sha256:48aaf8e7955ea5adc1c3d18940e728ecc30d1cbdc22c95d845e7a0f3ccb984a0"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidNesc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"nesc_identifier":{"root":"nesc_identifier","grammar":{"atoms":[{"Entity":{"atom":44}},{"Str":{"pattern":"Draft"}},{"Named":{"name":"nesc_draft_marker","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":" "}},{"Entity":{"atom":14}},{"Entity":{"atom":9}},{"Str":{"pattern":"National Electrical Safety Code"}},{"Str":{"pattern":"National Electric Safety Code"}},{"Alternative":{"atoms":[7,8]}},{"Named":{"name":"nesc_full_name","atom":6}},{"Entity":{"atom":12}},{"Str":{"pattern":"NESC"}},{"Named":{"name":"nesc_abbr","atom":11}},{"Alternative":{"atoms":[10,13]}},{"Entity":{"atom":16}},{"Str":{"pattern":"(R)"}},{"Named":{"name":"registered","atom":15}},{"Repetition":{"atom":17,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Str":{"pattern":","}},{"Named":{"name":"comma","atom":19}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[21,22]}},{"Entity":{"atom":38}},{"Str":{"pattern":"January"}},{"Str":{"pattern":"February"}},{"Str":{"pattern":"March"}},{"Str":{"pattern":"April"}},{"Str":{"pattern":"May"}},{"Str":{"pattern":"June"}},{"Str":{"pattern":"July"}},{"Str":{"pattern":"August"}},{"Str":{"pattern":"September"}},{"Str":{"pattern":"October"}},{"Str":{"pattern":"November"}},{"Str":{"pattern":"December"}},{"Alternative":{"atoms":[25,26,27,28,29,30,31,32,33,34,35,36]}},{"Named":{"name":"month","atom":37}},{"Entity":{"atom":4}},{"Entity":{"atom":41}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":40,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":42}},{"Sequence":{"atoms":[2,3,5,18,23,24,39,43]}},{"Entity":{"atom":79}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":46}},{"Entity":{"atom":4}},{"Str":{"pattern":"Proposals"}},{"Str":{"pattern":"Proposal"}},{"Alternative":{"atoms":[49,50]}},{"Entity":{"atom":4}},{"Str":{"pattern":"for"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":41}},{"Repetition":{"atom":57,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":58}},{"Entity":{"atom":4}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":4}},{"Str":{"pattern":"of"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":67}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"nesc_abbr","atom":71}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":73}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[69,70,72,75,76]}},{"Repetition":{"atom":77,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[47,48,51,52,53,54,55,56,59,60,61,62,63,64,65,66,68,78]}},{"Entity":{"atom":110}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":81}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":83}},{"Repetition":{"atom":84,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[82,85]}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":87}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[88,89]}},{"Entity":{"atom":93}},{"Str":{"pattern":"C2"}},{"Named":{"name":"code","atom":92}},{"Entity":{"atom":95}},{"Str":{"pattern":"-"}},{"Named":{"name":"dash","atom":94}},{"Entity":{"atom":41}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":98}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Entity":{"atom":107}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Redline"}},{"Alternative":{"atoms":[104,105]}},{"Named":{"name":"variant","atom":106}},{"Sequence":{"atoms":[100,101,102,103]}},{"Repetition":{"atom":108,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[86,90,91,96,99,109]}},{"Entity":{"atom":142}},{"Entity":{"atom":93}},{"Entity":{"atom":114}},{"Str":{"pattern":"."}},{"Named":{"name":"dot","atom":113}},{"Entity":{"atom":41}},{"Repetition":{"atom":116,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":117}},{"Entity":{"atom":114}},{"Named":{"name":"dot","atom":119}},{"Sequence":{"atoms":[115,118,120]}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":122}},{"Entity":{"atom":41}},{"Repetition":{"atom":124,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":125}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":127}},{"Sequence":{"atoms":[123,126,128]}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":130}},{"Entity":{"atom":41}},{"Repetition":{"atom":132,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":133}},{"Entity":{"atom":136}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":135}},{"Sequence":{"atoms":[131,134,137]}},{"Alternative":{"atoms":[121,129,138]}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":140}},{"Sequence":{"atoms":[112,139,141]}},{"Entity":{"atom":171}},{"Entity":{"atom":93}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":145}},{"Entity":{"atom":41}},{"Repetition":{"atom":147,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":148}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":150}},{"Repetition":{"atom":151,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[152,153]}},{"Repetition":{"atom":154,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":156}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":158}},{"Repetition":{"atom":159,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"nesc_abbr","atom":163}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":165}},{"Repetition":{"atom":166,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[161,162,164,167,168]}},{"Repetition":{"atom":169,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[144,146,149,155,157,160,170]}},{"Entity":{"atom":223}},{"Entity":{"atom":41}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"full_name","atom":177}},{"Entity":{"atom":16}},{"Named":{"name":"name_registered","atom":179}},{"Repetition":{"atom":180,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"paren_abbr","atom":184}},{"Entity":{"atom":16}},{"Named":{"name":"paren_registered","atom":186}},{"Repetition":{"atom":187,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[182,183,185,188,189]}},{"Repetition":{"atom":190,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[178,181,191]}},{"Entity":{"atom":12}},{"Named":{"name":"abbr","atom":193}},{"Entity":{"atom":16}},{"Named":{"name":"abbr_registered","atom":195}},{"Repetition":{"atom":196,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[194,197]}},{"Alternative":{"atoms":[192,198]}},{"Entity":{"atom":4}},{"Entity":{"atom":107}},{"Sequence":{"atoms":[200,201]}},{"Repetition":{"atom":202,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":204}},{"Entity":{"atom":4}},{"Entity":{"atom":220}},{"Str":{"pattern":"Premier Edition"}},{"Str":{"pattern":"Second Edition"}},{"Str":{"pattern":"Third Edition"}},{"Str":{"pattern":"Fourth Edition"}},{"Str":{"pattern":"Fifth Edition"}},{"Str":{"pattern":"Sixth Edition"}},{"Str":{"pattern":"Seventh Edition"}},{"Str":{"pattern":"Eighth Edition"}},{"Str":{"pattern":"Ninth Edition"}},{"Str":{"pattern":"Tenth Edition"}},{"Str":{"pattern":"First Edition"}},{"Alternative":{"atoms":[208,209,210,211,212,213,214,215,216,217,218]}},{"Named":{"name":"edition","atom":219}},{"Sequence":{"atoms":[205,206,207]}},{"Repetition":{"atom":221,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[175,176,199,203,222]}},{"Alternative":{"atoms":[0,45,80,111,143,172]}}],"root":224},"bindings":[{"capture":"code","path":"code","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"full_name","path":"full_name","type":"string","card":null,"preprocess":null},{"capture":"name_registered","path":"name_registered","type":"string","card":null,"preprocess":null},{"capture":"paren_abbr","path":"paren_abbr","type":"string","card":null,"preprocess":null},{"capture":"paren_registered","path":"paren_registered","type":"string","card":null,"preprocess":null},{"capture":"abbr","path":"abbr","type":"string","card":null,"preprocess":null},{"capture":"abbr_registered","path":"abbr_registered","type":"string","card":null,"preprocess":null},{"capture":"variant","path":"variant","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"month","path":"month","type":"string","card":null,"preprocess":null},{"capture":"preprint","path":"preprint","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nesc_full_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"nesc_identifier","render":{},"derive":{},"tests":[{"entry":"nesc_identifier","kind":"accept","input":"C2-2023 National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"2023 NESC","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"National Electrical Safety Code, C2-2017","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Draft NESC, January 2016","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2.2012.Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2012-Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2002/Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))","expect":{}},{"entry":"nesc_identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ieee/nesc/parser.rb — National Electrical Safety\n# Code designations: C2-year, year-first, name-first and Draft forms\n# with (R) marks, editions and variants. Consumed by the ieee grammar\n# via `use nesc`.\n#\n# Edition-2 notes: the year body (4digit — a bounded repetition of a\n# ref) inlines at every capture site, since a capture wrapping a\n# repetition ref expands to node lists inside the capture while the\n# inlined body binds as one scalar string. The month / edition /\n# variant captures stay on their rules — pure literal alternations\n# bind as spans — and the (R)/NESC abbreviation marks capture their\n# literal tokens directly.\n\ngrammar PubidNesc version \"0.1.0\" edition 2 {\n digit = %x30-39\n space = \" \"\n comma = \",\"\n dash = \"-\"\n dot = \".\"\n slash = \"/\"\n\n c2_code = \"C2\" as code\n nesc_full_name = \"National Electrical Safety Code\" / \"National Electric Safety Code\"\n nesc_abbr = \"NESC\"\n nesc_name = nesc_full_name / nesc_abbr\n registered = \"(R)\"\n edition = {\n (\n \"Premier Edition\"\n / \"Second Edition\"\n / \"Third Edition\"\n / \"Fourth Edition\"\n / \"Fifth Edition\"\n / \"Sixth Edition\"\n / \"Seventh Edition\"\n / \"Eighth Edition\"\n / \"Ninth Edition\"\n / \"Tenth Edition\"\n / \"First Edition\"\n ) as edition\n }\n variant = {\n (\"Handbook\" / \"Redline\") as variant\n }\n month = {\n (\n \"January\"\n / \"February\"\n / \"March\"\n / \"April\"\n / \"May\"\n / \"June\"\n / \"July\"\n / \"August\"\n / \"September\"\n / \"October\"\n / \"November\"\n / \"December\"\n ) as month\n }\n\n c2_standard = {\n (c2_code) (dash) ((4digit)) as year [([comma] space)] nesc_full_name\n [registered]\n [(space \"(\" (nesc_abbr) [(registered)] \")\")]\n }\n year_first = {\n ((4digit)) as year space\n (\n ((nesc_full_name)) as full_name [(registered) as name_registered]\n [(space \"(\" (nesc_abbr) as paren_abbr [(registered) as paren_registered] \")\")]\n / ((nesc_abbr)) as abbr [(registered) as abbr_registered]\n )\n [(space (variant))]\n [((comma space edition))]\n }\n name_first = {\n ((nesc_full_name [registered])) (comma space) c2_code (dash)\n ((4digit)) as year\n [((space \"-\" space (variant)))]\n }\n draft_nesc = {\n (\"Draft\") as nesc_draft_marker space nesc_name [registered] (comma space) (month) space\n ((4digit)) as year\n }\n # Preprint is a draft STAGE of the C2 code (NESC terminology for its\n # pre-edition drafts), not a variant: dotted is the canonical spelling\n # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's\n # slash tail (C2-2002/Preprint) are aliases. The verbose\n # \"Preprint Proposal(s) for the YYYY Edition of ...\" forms cite the same\n # draft by its target edition year.\n c2_preprint = {\n c2_code\n (\n (dot ((4digit)) as year dot)\n / (dash ((4digit)) as year dash)\n / (dash ((4digit)) as year slash)\n )\n ((\"Preprint\")) as preprint\n }\n preprint_proposal = {\n ((\"Preprint\")) as preprint space (\"Proposals\" / \"Proposal\") space \"for\" space\n \"the\" space ((4digit)) as year space \"Edition\" space \"of\" space \"the\" space\n nesc_full_name\n [(space \"(\" (nesc_abbr) [registered] \")\")]\n }\n nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first\n\n entry nesc_identifier: nesc_identifier\n\n bindings nesc_identifier {\n code -> code (string)\n year -> year (string)\n full_name -> full_name (string)\n name_registered -> name_registered (string)\n paren_abbr -> paren_abbr (string)\n paren_registered -> paren_registered (string)\n abbr -> abbr (string)\n abbr_registered -> abbr_registered (string)\n variant -> variant (string)\n edition -> edition (string)\n month -> month (string)\n preprint -> preprint (string)\n }\n\n test {\n accept \"C2-2023 National Electrical Safety Code\"\n accept \"2023 NESC\"\n accept \"National Electrical Safety Code, C2-2017\"\n accept \"Draft NESC, January 2016\"\n accept \"C2.2012.Preprint\"\n accept \"C2-2012-Preprint\"\n accept \"C2-2002/Preprint\"\n accept \"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code\"\n accept \"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))\"\n reject \"nonsense\"\n }\n}\n","source_hash":"e57b2445fd3b2f73eedab7c42cb26e901a214cdc440063785dca3831c8a07704","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:6c4bd90aeca680e71e85e1e265666d5ccb61df8cc9e3e674d51147f2ba93f475"}
data/data/parg/nesc.parg CHANGED
@@ -2,42 +2,127 @@
2
2
  # Code designations: C2-year, year-first, name-first and Draft forms
3
3
  # with (R) marks, editions and variants. Consumed by the ieee grammar
4
4
  # via `use nesc`.
5
+ #
6
+ # Edition-2 notes: the year body (4digit — a bounded repetition of a
7
+ # ref) inlines at every capture site, since a capture wrapping a
8
+ # repetition ref expands to node lists inside the capture while the
9
+ # inlined body binds as one scalar string. The month / edition /
10
+ # variant captures stay on their rules — pure literal alternations
11
+ # bind as spans — and the (R)/NESC abbreviation marks capture their
12
+ # literal tokens directly.
5
13
 
6
- grammar PubidNesc version "0.1.0" {
14
+ grammar PubidNesc version "0.1.0" edition 2 {
7
15
  digit = %x30-39
8
- digits = 1*digit
9
16
  space = " "
10
17
  comma = ","
11
18
  dash = "-"
12
19
  dot = "."
13
20
  slash = "/"
14
21
 
15
- year = 4digit
16
22
  c2_code = "C2" as code
17
23
  nesc_full_name = "National Electrical Safety Code" / "National Electric Safety Code"
18
24
  nesc_abbr = "NESC"
19
25
  nesc_name = nesc_full_name / nesc_abbr
20
26
  registered = "(R)"
21
- edition = ("Premier Edition" / "Second Edition" / "Third Edition" / "Fourth Edition" / "Fifth Edition" / "Sixth Edition" / "Seventh Edition" / "Eighth Edition" / "Ninth Edition" / "Tenth Edition" / "First Edition") as edition
22
- variant = ("Handbook" / "Redline") as variant
23
- month = ("January" / "February" / "March" / "April" / "May" / "June" / "July" / "August" / "September" / "October" / "November" / "December") as month
27
+ edition = {
28
+ (
29
+ "Premier Edition"
30
+ / "Second Edition"
31
+ / "Third Edition"
32
+ / "Fourth Edition"
33
+ / "Fifth Edition"
34
+ / "Sixth Edition"
35
+ / "Seventh Edition"
36
+ / "Eighth Edition"
37
+ / "Ninth Edition"
38
+ / "Tenth Edition"
39
+ / "First Edition"
40
+ ) as edition
41
+ }
42
+ variant = {
43
+ ("Handbook" / "Redline") as variant
44
+ }
45
+ month = {
46
+ (
47
+ "January"
48
+ / "February"
49
+ / "March"
50
+ / "April"
51
+ / "May"
52
+ / "June"
53
+ / "July"
54
+ / "August"
55
+ / "September"
56
+ / "October"
57
+ / "November"
58
+ / "December"
59
+ ) as month
60
+ }
24
61
 
25
- c2_standard = (c2_code dash (year) as year [([comma] space)] nesc_full_name [registered] [(space "(" nesc_abbr [registered] ")")])
26
- year_first = ((year) as year) space (((nesc_full_name) as full_name [(registered) as name_registered] [(space "(" (nesc_abbr) as paren_abbr [(registered) as paren_registered] ")")]) / (((nesc_abbr) as abbr [(registered) as abbr_registered]))) [(space variant)] [(comma space edition)]
27
- name_first = ((nesc_full_name [registered]) comma space c2_code dash (year) as year [(space "-" space variant)])
28
- draft_nesc = (("Draft") as draft space nesc_name [registered] comma space (month) space (year) as year)
62
+ c2_standard = {
63
+ (c2_code) (dash) ((4digit)) as year [([comma] space)] nesc_full_name
64
+ [registered]
65
+ [(space "(" (nesc_abbr) [(registered)] ")")]
66
+ }
67
+ year_first = {
68
+ ((4digit)) as year space
69
+ (
70
+ ((nesc_full_name)) as full_name [(registered) as name_registered]
71
+ [(space "(" (nesc_abbr) as paren_abbr [(registered) as paren_registered] ")")]
72
+ / ((nesc_abbr)) as abbr [(registered) as abbr_registered]
73
+ )
74
+ [(space (variant))]
75
+ [((comma space edition))]
76
+ }
77
+ name_first = {
78
+ ((nesc_full_name [registered])) (comma space) c2_code (dash)
79
+ ((4digit)) as year
80
+ [((space "-" space (variant)))]
81
+ }
82
+ draft_nesc = {
83
+ ("Draft") as nesc_draft_marker space nesc_name [registered] (comma space) (month) space
84
+ ((4digit)) as year
85
+ }
29
86
  # Preprint is a draft STAGE of the C2 code (NESC terminology for its
30
87
  # pre-edition drafts), not a variant: dotted is the canonical spelling
31
88
  # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's
32
89
  # slash tail (C2-2002/Preprint) are aliases. The verbose
33
90
  # "Preprint Proposal(s) for the YYYY Edition of ..." forms cite the same
34
91
  # draft by its target edition year.
35
- c2_preprint = (c2_code ((dot (year) as year dot) / (dash (year) as year dash) / (dash (year) as year slash)) ("Preprint") as preprint)
36
- preprint_proposal = (("Preprint") as preprint space ("Proposals" / "Proposal") space "for" space "the" space (year) as year space "Edition" space "of" space "the" space nesc_full_name [(space "(" nesc_abbr [registered] ")")])
92
+ c2_preprint = {
93
+ c2_code
94
+ (
95
+ (dot ((4digit)) as year dot)
96
+ / (dash ((4digit)) as year dash)
97
+ / (dash ((4digit)) as year slash)
98
+ )
99
+ (("Preprint")) as preprint
100
+ }
101
+ preprint_proposal = {
102
+ (("Preprint")) as preprint space ("Proposals" / "Proposal") space "for" space
103
+ "the" space ((4digit)) as year space "Edition" space "of" space "the" space
104
+ nesc_full_name
105
+ [(space "(" (nesc_abbr) [registered] ")")]
106
+ }
37
107
  nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first
38
108
 
39
109
  entry nesc_identifier: nesc_identifier
40
110
 
111
+ bindings nesc_identifier {
112
+ code -> code (string)
113
+ year -> year (string)
114
+ full_name -> full_name (string)
115
+ name_registered -> name_registered (string)
116
+ paren_abbr -> paren_abbr (string)
117
+ paren_registered -> paren_registered (string)
118
+ abbr -> abbr (string)
119
+ abbr_registered -> abbr_registered (string)
120
+ variant -> variant (string)
121
+ edition -> edition (string)
122
+ month -> month (string)
123
+ preprint -> preprint (string)
124
+ }
125
+
41
126
  test {
42
127
  accept "C2-2023 National Electrical Safety Code"
43
128
  accept "2023 NESC"
data/data/parg/parg.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"1.0.0","grammar":"PgMeta","shape":"parsanol-tree/v2","binding_version":1,"entries":{"file":{"root":"pg_file","grammar":{"atoms":[{"Entity":{"atom":5}},{"Entity":{"atom":4}},{"Re":{"pattern":"[ ]"}},{"Re":{"pattern":"[\\x09]"}},{"Alternative":{"atoms":[2,3]}},{"Repetition":{"atom":1,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":551}},{"Entity":{"atom":21}},{"Str":{"pattern":"use"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":19}},{"Entity":{"atom":15}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[13,14]}},{"Entity":{"atom":17}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[_]"}},{"Alternative":{"atoms":[12,16,18]}},{"Repetition":{"atom":11,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[8,9,10]}},{"Entity":{"atom":29}},{"Str":{"pattern":"##"}},{"Entity":{"atom":27}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[25,26]}},{"Repetition":{"atom":24,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[23,28]}},{"Entity":{"atom":34}},{"Str":{"pattern":"#"}},{"Entity":{"atom":27}},{"Repetition":{"atom":32,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[31,33]}},{"Entity":{"atom":550}},{"Entity":{"atom":500}},{"Str":{"pattern":"grammar"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"version"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Str":{"pattern":"\""}},{"Str":{"pattern":"\\"}},{"Entity":{"atom":27}},{"Sequence":{"atoms":[45,46]}},{"Entity":{"atom":52}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\x21]"}},{"Re":{"pattern":"[\\x23-\\u{10ffff}]"}},{"Alternative":{"atoms":[49,50,51]}},{"Alternative":{"atoms":[47,48]}},{"Repetition":{"atom":53,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"\""}},{"Sequence":{"atoms":[44,54,55]}},{"Entity":{"atom":5}},{"Str":{"pattern":"mode"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[57,58,59,60]}},{"Repetition":{"atom":61,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Entity":{"atom":4}},{"Entity":{"atom":68}},{"Re":{"pattern":"[\\x0a]"}},{"Alternative":{"atoms":[66,67]}},{"Repetition":{"atom":69,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":494}},{"Entity":{"atom":250}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":249}},{"Entity":{"atom":248}},{"Entity":{"atom":247}},{"Entity":{"atom":5}},{"Entity":{"atom":95}},{"Entity":{"atom":84}},{"Entity":{"atom":17}},{"Repetition":{"atom":83,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"*"}},{"Entity":{"atom":84}},{"Repetition":{"atom":86,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[85,87]}},{"Repetition":{"atom":88,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[82,89]}},{"Str":{"pattern":"*"}},{"Entity":{"atom":84}},{"Repetition":{"atom":92,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[91,93]}},{"Alternative":{"atoms":[90,94]}},{"Entity":{"atom":5}},{"Entity":{"atom":242}},{"Str":{"pattern":"!"}},{"Str":{"pattern":"&"}},{"Alternative":{"atoms":[98,99]}},{"Entity":{"atom":241}},{"Entity":{"atom":240}},{"Entity":{"atom":132}},{"Entity":{"atom":122}},{"Str":{"pattern":"%x"}},{"Entity":{"atom":112}},{"Entity":{"atom":111}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x41-\\x46]"}},{"Re":{"pattern":"[\\x61-\\x66]"}},{"Alternative":{"atoms":[108,109,110]}},{"Repetition":{"atom":107,"min":2,"max":6,"tag":"Repetition"}},{"Str":{"pattern":"-"}},{"Entity":{"atom":112}},{"Sequence":{"atoms":[113,114]}},{"Str":{"pattern":"."}},{"Entity":{"atom":112}},{"Sequence":{"atoms":[116,117]}},{"Repetition":{"atom":118,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[115,119]}},{"Repetition":{"atom":120,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[105,106,121]}},{"Entity":{"atom":126}},{"Str":{"pattern":"%i"}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[124,125]}},{"Entity":{"atom":130}},{"Str":{"pattern":"%s"}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[128,129]}},{"Entity":{"atom":56}},{"Alternative":{"atoms":[104,123,127,131]}},{"Str":{"pattern":"("}},{"Entity":{"atom":5}},{"Repetition":{"atom":134,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":164}},{"Entity":{"atom":5}},{"Str":{"pattern":"/"}},{"Entity":{"atom":5}},{"Entity":{"atom":161}},{"Entity":{"atom":5}},{"Entity":{"atom":158}},{"Entity":{"atom":150}},{"Entity":{"atom":5}},{"Str":{"pattern":"as"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[144,145,146,147]}},{"Repetition":{"atom":148,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[102,149]}},{"Alternative":{"atoms":[97,143]}},{"Repetition":{"atom":151,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[81,96,152]}},{"Entity":{"atom":155}},{"Sequence":{"atoms":[100,101]}},{"Entity":{"atom":150}},{"Alternative":{"atoms":[153,154,156]}},{"Sequence":{"atoms":[80,157]}},{"Sequence":{"atoms":[141,142]}},{"Repetition":{"atom":159,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[79,160]}},{"Sequence":{"atoms":[137,138,139,140]}},{"Repetition":{"atom":162,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[78,163]}},{"Entity":{"atom":5}},{"Repetition":{"atom":165,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[133,135,136,166,167]}},{"Str":{"pattern":"["}},{"Entity":{"atom":5}},{"Repetition":{"atom":170,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":164}},{"Entity":{"atom":5}},{"Repetition":{"atom":173,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[169,171,172,174,175]}},{"Entity":{"atom":187}},{"Str":{"pattern":"alt"}},{"Entity":{"atom":5}},{"Str":{"pattern":"from_table"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":5}},{"Str":{"pattern":"column"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[178,179,180,181,182,183,184,185,186]}},{"Entity":{"atom":205}},{"Str":{"pattern":"set"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Str":{"pattern":"("}},{"Entity":{"atom":5}},{"Repetition":{"atom":197,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":164}},{"Entity":{"atom":5}},{"Repetition":{"atom":200,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[196,198,199,201,202]}},{"Alternative":{"atoms":[195,203]}},{"Sequence":{"atoms":[189,190,191,192,193,194,204]}},{"Entity":{"atom":238}},{"Str":{"pattern":"switch"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Repetition":{"atom":212,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":228}},{"Entity":{"atom":56}},{"Str":{"pattern":"_"}},{"Alternative":{"atoms":[215,216]}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":227}},{"Entity":{"atom":20}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[223,224]}},{"Repetition":{"atom":225,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[222,226]}},{"Sequence":{"atoms":[217,218,219,220,221]}},{"Entity":{"atom":70}},{"Entity":{"atom":228}},{"Sequence":{"atoms":[229,230]}},{"Repetition":{"atom":231,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[214,232]}},{"Repetition":{"atom":233,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":70}},{"Repetition":{"atom":235,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[207,208,209,210,211,213,234,236,237]}},{"Entity":{"atom":227}},{"Alternative":{"atoms":[103,168,176,177,188,206,239]}},{"Sequence":{"atoms":[102,149]}},{"Sequence":{"atoms":[100,101]}},{"Alternative":{"atoms":[97,143]}},{"Repetition":{"atom":243,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[81,96,244]}},{"Alternative":{"atoms":[245,154,156]}},{"Sequence":{"atoms":[80,246]}},{"Sequence":{"atoms":[79,160]}},{"Sequence":{"atoms":[78,163]}},{"Sequence":{"atoms":[73,74,75,76,77]}},{"Entity":{"atom":338}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":4}},{"Entity":{"atom":68}},{"Alternative":{"atoms":[255,256]}},{"Repetition":{"atom":257,"min":0,"max":null,"tag":"Repetition"}},{"Re":{"pattern":"[{]"}},{"Entity":{"atom":335}},{"Entity":{"atom":334}},{"Entity":{"atom":333}},{"Entity":{"atom":268}},{"Entity":{"atom":4}},{"Entity":{"atom":68}},{"Entity":{"atom":34}},{"Alternative":{"atoms":[264,265,266]}},{"Repetition":{"atom":267,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":95}},{"Entity":{"atom":268}},{"Entity":{"atom":328}},{"Str":{"pattern":"!"}},{"Str":{"pattern":"&"}},{"Alternative":{"atoms":[272,273]}},{"Entity":{"atom":327}},{"Entity":{"atom":326}},{"Entity":{"atom":132}},{"Str":{"pattern":"("}},{"Entity":{"atom":268}},{"Repetition":{"atom":279,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":309}},{"Entity":{"atom":268}},{"Str":{"pattern":"/"}},{"Entity":{"atom":268}},{"Entity":{"atom":306}},{"Entity":{"atom":268}},{"Entity":{"atom":303}},{"Entity":{"atom":295}},{"Entity":{"atom":268}},{"Str":{"pattern":"as"}},{"Entity":{"atom":268}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[289,290,291,292]}},{"Repetition":{"atom":293,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[276,294]}},{"Alternative":{"atoms":[271,288]}},{"Repetition":{"atom":296,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[269,270,297]}},{"Entity":{"atom":300}},{"Sequence":{"atoms":[274,275]}},{"Entity":{"atom":295}},{"Alternative":{"atoms":[298,299,301]}},{"Sequence":{"atoms":[263,302]}},{"Sequence":{"atoms":[286,287]}},{"Repetition":{"atom":304,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[262,305]}},{"Sequence":{"atoms":[282,283,284,285]}},{"Repetition":{"atom":307,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[261,308]}},{"Entity":{"atom":268}},{"Repetition":{"atom":310,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[278,280,281,311,312]}},{"Str":{"pattern":"["}},{"Entity":{"atom":268}},{"Repetition":{"atom":315,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":309}},{"Entity":{"atom":268}},{"Repetition":{"atom":318,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[314,316,317,319,320]}},{"Entity":{"atom":187}},{"Entity":{"atom":205}},{"Entity":{"atom":238}},{"Entity":{"atom":227}},{"Alternative":{"atoms":[277,313,321,322,323,324,325]}},{"Sequence":{"atoms":[276,294]}},{"Sequence":{"atoms":[274,275]}},{"Alternative":{"atoms":[271,288]}},{"Repetition":{"atom":329,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[269,270,330]}},{"Alternative":{"atoms":[331,299,301]}},{"Sequence":{"atoms":[263,332]}},{"Sequence":{"atoms":[262,305]}},{"Sequence":{"atoms":[261,308]}},{"Entity":{"atom":268}},{"Re":{"pattern":"[}]"}},{"Sequence":{"atoms":[252,253,254,258,259,260,336,337]}},{"Entity":{"atom":346}},{"Str":{"pattern":"entry"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[340,341,342,343,344,345]}},{"Entity":{"atom":404}},{"Str":{"pattern":"bindings"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":70}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Repetition":{"atom":353,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":394}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":370}},{"Entity":{"atom":20}},{"Str":{"pattern":"["}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[362,363]}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[365,366]}},{"Alternative":{"atoms":[364,367]}},{"Repetition":{"atom":368,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[361,369]}},{"Entity":{"atom":5}},{"Str":{"pattern":"("}},{"Entity":{"atom":20}},{"Str":{"pattern":","}},{"Entity":{"atom":5}},{"Entity":{"atom":381}},{"Entity":{"atom":17}},{"Str":{"pattern":"."}},{"Str":{"pattern":"*"}},{"Alternative":{"atoms":[377,378,379]}},{"Repetition":{"atom":380,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[374,375,376]}},{"Repetition":{"atom":382,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[371,372,373,383,384]}},{"Repetition":{"atom":385,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":5}},{"Str":{"pattern":"preprocess"}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[387,388,389,390,391]}},{"Repetition":{"atom":392,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[356,357,358,359,360,386,393]}},{"Entity":{"atom":70}},{"Entity":{"atom":394}},{"Sequence":{"atoms":[395,396]}},{"Repetition":{"atom":397,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[355,398]}},{"Repetition":{"atom":399,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":70}},{"Repetition":{"atom":401,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[348,349,350,351,352,354,400,402,403]}},{"Entity":{"atom":426}},{"Str":{"pattern":"preprocess"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":70}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Repetition":{"atom":411,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":423}},{"Str":{"pattern":"table_lookup"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[414,415,416,417,418,419,420,421,422]}},{"Entity":{"atom":70}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[406,407,408,409,410,412,413,424,425]}},{"Entity":{"atom":473}},{"Str":{"pattern":"test"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[429,430]}},{"Repetition":{"atom":431,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":70}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Repetition":{"atom":435,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":464}},{"Str":{"pattern":"accept"}},{"Str":{"pattern":"reject"}},{"Str":{"pattern":"example"}},{"Alternative":{"atoms":[438,439,440]}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Repetition":{"atom":446,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":458}},{"Entity":{"atom":20}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":84}},{"Str":{"pattern":"true"}},{"Str":{"pattern":"false"}},{"Alternative":{"atoms":[454,455]}},{"Alternative":{"atoms":[452,453,456]}},{"Sequence":{"atoms":[449,450,451,457]}},{"Entity":{"atom":70}},{"Repetition":{"atom":459,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[444,445,447,448,460,461]}},{"Repetition":{"atom":462,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[441,442,443,463]}},{"Entity":{"atom":70}},{"Entity":{"atom":464}},{"Sequence":{"atoms":[465,466]}},{"Repetition":{"atom":467,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[437,468]}},{"Repetition":{"atom":469,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":70}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[428,432,433,434,436,470,471,472]}},{"Entity":{"atom":482}},{"Str":{"pattern":"custom"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[475,476,477,478,479,480,481]}},{"Entity":{"atom":491}},{"Str":{"pattern":"state"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[484,485,486,487,488,489,490]}},{"Entity":{"atom":29}},{"Entity":{"atom":34}},{"Alternative":{"atoms":[72,251,339,347,405,427,474,483,492,493]}},{"Sequence":{"atoms":[65,71]}},{"Repetition":{"atom":495,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":70}},{"Repetition":{"atom":497,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[37,38,39,40,41,42,43,62,63,64,496,498,499]}},{"Entity":{"atom":346}},{"Entity":{"atom":404}},{"Entity":{"atom":426}},{"Entity":{"atom":473}},{"Entity":{"atom":542}},{"Str":{"pattern":"render"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":70}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Entity":{"atom":537}},{"Str":{"pattern":"field"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[513,514,515]}},{"Str":{"pattern":"literal"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[517,518,519]}},{"Str":{"pattern":"cond"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":70}},{"Str":{"pattern":"{"}},{"Entity":{"atom":70}},{"Entity":{"atom":533}},{"Sequence":{"atoms":[526,527]}},{"Repetition":{"atom":528,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":70}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[521,522,523,524,525,529,530,531]}},{"Alternative":{"atoms":[516,520,532]}},{"Sequence":{"atoms":[526,527]}},{"Repetition":{"atom":534,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[521,522,523,524,525,535,530,531]}},{"Alternative":{"atoms":[516,520,536]}},{"Sequence":{"atoms":[511,512]}},{"Repetition":{"atom":538,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":70}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[506,507,508,509,510,539,540,541]}},{"Entity":{"atom":549}},{"Str":{"pattern":"derive"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[544,545,546,547,548]}},{"Alternative":{"atoms":[36,501,502,503,504,505,543]}},{"Alternative":{"atoms":[7,22,30,35]}},{"Entity":{"atom":70}},{"Repetition":{"atom":552,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[6,553]}},{"Repetition":{"atom":554,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":5}},{"Sequence":{"atoms":[0,555,556]}}],"root":557},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nonl: branches 1 and 2 are order-dependent (first set not statically known)","rule str_body_char: branches 1 and 3 are order-dependent (first set not statically known)","rule str_body_char: branches 2 and 3 are order-dependent (first set not statically known)","rule hex: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule hex: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule hex: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 9 and 10 are order-dependent (shared first bytes; ordered choice is decisive)","rule top_item: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"file","render":{},"derive":{},"tests":[{"entry":"file","kind":"accept","input":"grammar T version \"1\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = b / c as d }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { g = [x] 3*y !z &w (p / q) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { k = 1*3(e / f) !(g h) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { custom lookback = \"ParsanolAtoms::Lookbehind\" a = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { state block_kind: symbol a = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (set block_kind = \"quote\") %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (switch block_kind { \"quote\" -> q _ -> never }) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (set d = (3*4(%x2D)) %x0A) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (!(state d) %x61-7A) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n p = {\n %i\"iso\" / %i\"ieee\"\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { q = { a b } }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n r =\n {\n x as y\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n s = {\n # a comment is body whitespace\n !(t / u) 2*v\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" mode \"v1\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" mode \"v2\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { q = { a }","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { q = { } }","expect":{}},{"entry":"file","kind":"reject","input":"nonsense","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { = }","expect":{}}],"docs":{},"source":"# PG described in PG — the self-description grammar (F10, phase 1).\n# It recognizes the language this file is written in, over raw text:\n# whitespace is threaded explicitly (pq = potential whitespace within a\n# line, nlws = line-breaking whitespace, bw = brace-body whitespace: the\n# b* rules thread it so brace-form rule bodies span lines). The\n# reference compiler remains parsanol-ruby (SSOT, TODO 11); this\n# artifact is the validator — and brace_rule below is itself written in\n# the brace form it recognizes.\n\ngrammar PgMeta version \"1.0.0\" mode \"v1\" {\n\n # ---- lexical ----\n digit = %x30-39\n hexdig = %x30-39 / %x41-46 / %x61-66\n letter = %x41-5A / %x61-7A\n ident_char = letter / digit / %x5F\n ident = 1*ident_char\n newline = %x0A\n nonl = %x01-09 / %x0B-10FFFF\n comment = \"#\" *nonl\n doc_marker = \"##\" *nonl\n ws = %x20 / %x09\n nlws = 1*(ws / newline)\n pq = *ws\n\n # ---- terminals ----\n str_body_char = %x01-09 / %x0B-21 / %x23-10FFFF\n dstring = \"\\\"\" *(\"\\\\\" nonl / str_body_char) \"\\\"\"\n istring = \"%i\" dstring\n sstring = \"%s\" dstring\n hexdigits = 2*6hexdig\n hexlit = \"%x\" hexdigits [(\"-\" hexdigits) / 1*(\".\" hexdigits)]\n hex = hexlit / istring / sstring / dstring\n\n # ---- expressions (pq-threaded) ----\n choice = seq *(pq \"/\" pq seq)\n seq = element *(pq element)\n element = pq (rep_prefix pq [pred / postfixed] / pred / postfixed)\n rep_prefix = num [\"*\" [num]] / \"*\" [num]\n num = 1*digit\n pred = (\"!\" / \"&\") postfixed\n postfixed = primary [pq \"as\" pq ident]\n table_alt = \"alt\" pq \"from_table\" pq dstring pq \"column\" pq dstring\n set_expr = \"set\" pq ident pq \"=\" pq (dstring / \"(\" [pq] choice [pq] \")\")\n switch_arm = (dstring / \"_\") pq \"->\" pq dotted_ident\n switch_expr = \"switch\" pq ident pq \"{\" *nlws [switch_arm *(nlws switch_arm)] *nlws \"}\"\n custom_line = \"custom\" pq ident pq \"=\" pq dstring\n state_line = \"state\" pq ident pq \":\" pq ident\n dotted_ident = ident *(\".\" ident)\n primary = hex / \"(\" [pq] choice [pq] \")\" / \"[\" [pq] choice [pq] \"]\" / table_alt / set_expr / switch_expr / dotted_ident\n\n # ---- brace-body expressions (bw-threaded: newlines are whitespace) ----\n bw = *(ws / newline / comment)\n bchoice = bseq *(bw \"/\" bw bseq)\n bseq = belement *(bw belement)\n belement = bw (rep_prefix bw [bpred / bpostfixed] / bpred / bpostfixed)\n bpred = (\"!\" / \"&\") bpostfixed\n bprimary = hex / \"(\" [bw] bchoice [bw] \")\" / \"[\" [bw] bchoice [bw] \"]\" / table_alt / set_expr / switch_expr / dotted_ident\n bpostfixed = bprimary [bw \"as\" bw ident]\n\n # ---- rules and sections ----\n rule = ident pq \"=\" pq choice\n brace_rule = {\n ident pq \"=\" *(ws / newline) %x7B\n bchoice bw %x7D\n }\n entry_section = \"entry\" pq ident \":\" pq ident\n path = ident *((\"[\" \"]\") / (\".\" ident))\n cardinality = 1*(digit / \".\" / \"*\")\n binding = ident pq \"->\" pq path [pq \"(\" ident [\",\" pq cardinality] \")\"] [pq \"preprocess\" \":\" pq ident]\n bindings_section = \"bindings\" pq ident nlws \"{\" [nlws] [binding *(nlws binding)] [nlws] \"}\"\n step = \"table_lookup\" pq ident pq ident pq \"->\" pq ident\n preprocess_section = \"preprocess\" pq ident nlws \"{\" *nlws step nlws \"}\"\n test_line = (\"accept\" / \"reject\" / \"example\") pq dstring [pq \"{\" *nlws test_pair *nlws \"}\"]\n test_pair = ident \":\" pq (dstring / num / (\"true\" / \"false\"))\n test_section = \"test\" [pq ident] nlws \"{\" *nlws [test_line *(nlws test_line)] nlws \"}\"\n rule_line = rule / brace_rule / entry_section / bindings_section / preprocess_section / test_section / custom_line / state_line / doc_marker / comment\n grammar_block = \"grammar\" pq ident pq \"version\" pq dstring [pq \"mode\" pq dstring] pq \"{\" *(nlws rule_line) *nlws \"}\"\n render_section = \"render\" pq ident nlws \"{\" *(nlws render_seg) nlws \"}\"\n render_seg = (\"field\" pq ident) / (\"literal\" pq dstring) / (\"cond\" pq ident nlws \"{\" *(nlws render_seg) nlws \"}\")\n derive_section = \"derive\" pq ident pq dstring\n top = grammar_block / entry_section / bindings_section / preprocess_section / test_section / render_section / derive_section\n use_line = \"use\" pq ident\n top_item = use_line / doc_marker / comment / top\n\n pg_file = pq *(top_item [nlws]) pq\n\n entry file: pg_file\n\n test {\n accept \"grammar T version \\\"1\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = b / c as d }\"\n accept \"grammar T version \\\"1\\\" { g = [x] 3*y !z &w (p / q) }\"\n accept \"grammar T version \\\"1\\\" { k = 1*3(e / f) !(g h) }\"\n accept \"grammar T version \\\"1\\\" { custom lookback = \\\"ParsanolAtoms::Lookbehind\\\" a = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { state block_kind: symbol a = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = (set block_kind = \\\"quote\\\") %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = (switch block_kind { \\\"quote\\\" -> q _ -> never }) }\"\n accept \"grammar T version \\\"1\\\" { a = (set d = (3*4(%x2D)) %x0A) }\"\n accept \"grammar T version \\\"1\\\" { a = (!(state d) %x61-7A) }\"\n accept \"grammar T version \\\"1\\\" {\\n p = {\\n %i\\\"iso\\\" / %i\\\"ieee\\\"\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" { q = { a b } }\"\n accept \"grammar T version \\\"1\\\" {\\n r =\\n {\\n x as y\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" {\\n s = {\\n # a comment is body whitespace\\n !(t / u) 2*v\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" mode \\\"v1\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" mode \\\"v2\\\" { x = %x30-39 }\"\n reject \"grammar T version \\\"1\\\" { q = { a }\"\n reject \"grammar T version \\\"1\\\" { q = { } }\"\n reject \"nonsense\"\n reject \"grammar T version \\\"1\\\" { = }\"\n }\n}\n","source_hash":"032e8492146fe746b993efbdc6e743a9de7748fcae4200b021aa42063fc03583","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":1,"checksum":"sha256:b128371ba61eb0f88a62b0132ae5cc059897bc037bc90a9de3e58798e8641aa6"}
1
+ {"bindings":null,"version":"1.0.0","grammar":"PgMeta","shape":"parsanol-tree/v2","binding_version":1,"entries":{"file":{"root":"pg_file","grammar":{"atoms":[{"Entity":{"atom":5}},{"Entity":{"atom":4}},{"Re":{"pattern":"[ ]"}},{"Re":{"pattern":"[\\x09]"}},{"Alternative":{"atoms":[2,3]}},{"Repetition":{"atom":1,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":572}},{"Entity":{"atom":21}},{"Str":{"pattern":"use"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":19}},{"Entity":{"atom":15}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[13,14]}},{"Entity":{"atom":17}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[_]"}},{"Alternative":{"atoms":[12,16,18]}},{"Repetition":{"atom":11,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[8,9,10]}},{"Entity":{"atom":29}},{"Str":{"pattern":"##"}},{"Entity":{"atom":27}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[25,26]}},{"Repetition":{"atom":24,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[23,28]}},{"Entity":{"atom":34}},{"Str":{"pattern":"#"}},{"Entity":{"atom":27}},{"Repetition":{"atom":32,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[31,33]}},{"Entity":{"atom":571}},{"Entity":{"atom":521}},{"Str":{"pattern":"grammar"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"version"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Str":{"pattern":"\""}},{"Str":{"pattern":"\\"}},{"Entity":{"atom":27}},{"Sequence":{"atoms":[45,46]}},{"Entity":{"atom":52}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\x21]"}},{"Re":{"pattern":"[\\x23-\\u{10ffff}]"}},{"Alternative":{"atoms":[49,50,51]}},{"Alternative":{"atoms":[47,48]}},{"Repetition":{"atom":53,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"\""}},{"Sequence":{"atoms":[44,54,55]}},{"Entity":{"atom":5}},{"Entity":{"atom":71}},{"Str":{"pattern":"mode"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[59,60,61]}},{"Str":{"pattern":"edition"}},{"Entity":{"atom":5}},{"Entity":{"atom":67}},{"Entity":{"atom":17}},{"Repetition":{"atom":66,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":56}},{"Alternative":{"atoms":[65,68]}},{"Sequence":{"atoms":[63,64,69]}},{"Alternative":{"atoms":[62,70]}},{"Sequence":{"atoms":[57,58]}},{"Repetition":{"atom":72,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Entity":{"atom":4}},{"Entity":{"atom":79}},{"Re":{"pattern":"[\\x0a]"}},{"Alternative":{"atoms":[77,78]}},{"Repetition":{"atom":80,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":515}},{"Entity":{"atom":259}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":258}},{"Entity":{"atom":257}},{"Entity":{"atom":256}},{"Entity":{"atom":5}},{"Entity":{"atom":104}},{"Entity":{"atom":67}},{"Str":{"pattern":"*"}},{"Entity":{"atom":67}},{"Repetition":{"atom":95,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[94,96]}},{"Repetition":{"atom":97,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[93,98]}},{"Str":{"pattern":"*"}},{"Entity":{"atom":67}},{"Repetition":{"atom":101,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[100,102]}},{"Alternative":{"atoms":[99,103]}},{"Entity":{"atom":5}},{"Entity":{"atom":251}},{"Str":{"pattern":"!"}},{"Str":{"pattern":"&"}},{"Alternative":{"atoms":[107,108]}},{"Entity":{"atom":250}},{"Entity":{"atom":249}},{"Entity":{"atom":141}},{"Entity":{"atom":131}},{"Str":{"pattern":"%x"}},{"Entity":{"atom":121}},{"Entity":{"atom":120}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x41-\\x46]"}},{"Re":{"pattern":"[\\x61-\\x66]"}},{"Alternative":{"atoms":[117,118,119]}},{"Repetition":{"atom":116,"min":2,"max":6,"tag":"Repetition"}},{"Str":{"pattern":"-"}},{"Entity":{"atom":121}},{"Sequence":{"atoms":[122,123]}},{"Str":{"pattern":"."}},{"Entity":{"atom":121}},{"Sequence":{"atoms":[125,126]}},{"Repetition":{"atom":127,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[124,128]}},{"Repetition":{"atom":129,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[114,115,130]}},{"Entity":{"atom":135}},{"Str":{"pattern":"%i"}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[133,134]}},{"Entity":{"atom":139}},{"Str":{"pattern":"%s"}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[137,138]}},{"Entity":{"atom":56}},{"Alternative":{"atoms":[113,132,136,140]}},{"Str":{"pattern":"("}},{"Entity":{"atom":5}},{"Repetition":{"atom":143,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":173}},{"Entity":{"atom":5}},{"Str":{"pattern":"/"}},{"Entity":{"atom":5}},{"Entity":{"atom":170}},{"Entity":{"atom":5}},{"Entity":{"atom":167}},{"Entity":{"atom":159}},{"Entity":{"atom":5}},{"Str":{"pattern":"as"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[153,154,155,156]}},{"Repetition":{"atom":157,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[111,158]}},{"Alternative":{"atoms":[106,152]}},{"Repetition":{"atom":160,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[92,105,161]}},{"Entity":{"atom":164}},{"Sequence":{"atoms":[109,110]}},{"Entity":{"atom":159}},{"Alternative":{"atoms":[162,163,165]}},{"Sequence":{"atoms":[91,166]}},{"Sequence":{"atoms":[150,151]}},{"Repetition":{"atom":168,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[90,169]}},{"Sequence":{"atoms":[146,147,148,149]}},{"Repetition":{"atom":171,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[89,172]}},{"Entity":{"atom":5}},{"Repetition":{"atom":174,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[142,144,145,175,176]}},{"Str":{"pattern":"["}},{"Entity":{"atom":5}},{"Repetition":{"atom":179,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":173}},{"Entity":{"atom":5}},{"Repetition":{"atom":182,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[178,180,181,183,184]}},{"Entity":{"atom":196}},{"Str":{"pattern":"alt"}},{"Entity":{"atom":5}},{"Str":{"pattern":"from_table"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":5}},{"Str":{"pattern":"column"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[187,188,189,190,191,192,193,194,195]}},{"Entity":{"atom":214}},{"Str":{"pattern":"set"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Str":{"pattern":"("}},{"Entity":{"atom":5}},{"Repetition":{"atom":206,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":173}},{"Entity":{"atom":5}},{"Repetition":{"atom":209,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[205,207,208,210,211]}},{"Alternative":{"atoms":[204,212]}},{"Sequence":{"atoms":[198,199,200,201,202,203,213]}},{"Entity":{"atom":247}},{"Str":{"pattern":"switch"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Repetition":{"atom":221,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":237}},{"Entity":{"atom":56}},{"Str":{"pattern":"_"}},{"Alternative":{"atoms":[224,225]}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":236}},{"Entity":{"atom":20}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[232,233]}},{"Repetition":{"atom":234,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[231,235]}},{"Sequence":{"atoms":[226,227,228,229,230]}},{"Entity":{"atom":81}},{"Entity":{"atom":237}},{"Sequence":{"atoms":[238,239]}},{"Repetition":{"atom":240,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[223,241]}},{"Repetition":{"atom":242,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":81}},{"Repetition":{"atom":244,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[216,217,218,219,220,222,243,245,246]}},{"Entity":{"atom":236}},{"Alternative":{"atoms":[112,177,185,186,197,215,248]}},{"Sequence":{"atoms":[111,158]}},{"Sequence":{"atoms":[109,110]}},{"Alternative":{"atoms":[106,152]}},{"Repetition":{"atom":252,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[92,105,253]}},{"Alternative":{"atoms":[254,163,165]}},{"Sequence":{"atoms":[91,255]}},{"Sequence":{"atoms":[90,169]}},{"Sequence":{"atoms":[89,172]}},{"Sequence":{"atoms":[84,85,86,87,88]}},{"Entity":{"atom":347}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":4}},{"Entity":{"atom":79}},{"Alternative":{"atoms":[264,265]}},{"Repetition":{"atom":266,"min":0,"max":null,"tag":"Repetition"}},{"Re":{"pattern":"[{]"}},{"Entity":{"atom":344}},{"Entity":{"atom":343}},{"Entity":{"atom":342}},{"Entity":{"atom":277}},{"Entity":{"atom":4}},{"Entity":{"atom":79}},{"Entity":{"atom":34}},{"Alternative":{"atoms":[273,274,275]}},{"Repetition":{"atom":276,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":104}},{"Entity":{"atom":277}},{"Entity":{"atom":337}},{"Str":{"pattern":"!"}},{"Str":{"pattern":"&"}},{"Alternative":{"atoms":[281,282]}},{"Entity":{"atom":336}},{"Entity":{"atom":335}},{"Entity":{"atom":141}},{"Str":{"pattern":"("}},{"Entity":{"atom":277}},{"Repetition":{"atom":288,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":318}},{"Entity":{"atom":277}},{"Str":{"pattern":"/"}},{"Entity":{"atom":277}},{"Entity":{"atom":315}},{"Entity":{"atom":277}},{"Entity":{"atom":312}},{"Entity":{"atom":304}},{"Entity":{"atom":277}},{"Str":{"pattern":"as"}},{"Entity":{"atom":277}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[298,299,300,301]}},{"Repetition":{"atom":302,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[285,303]}},{"Alternative":{"atoms":[280,297]}},{"Repetition":{"atom":305,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[278,279,306]}},{"Entity":{"atom":309}},{"Sequence":{"atoms":[283,284]}},{"Entity":{"atom":304}},{"Alternative":{"atoms":[307,308,310]}},{"Sequence":{"atoms":[272,311]}},{"Sequence":{"atoms":[295,296]}},{"Repetition":{"atom":313,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[271,314]}},{"Sequence":{"atoms":[291,292,293,294]}},{"Repetition":{"atom":316,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[270,317]}},{"Entity":{"atom":277}},{"Repetition":{"atom":319,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[287,289,290,320,321]}},{"Str":{"pattern":"["}},{"Entity":{"atom":277}},{"Repetition":{"atom":324,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":318}},{"Entity":{"atom":277}},{"Repetition":{"atom":327,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[323,325,326,328,329]}},{"Entity":{"atom":196}},{"Entity":{"atom":214}},{"Entity":{"atom":247}},{"Entity":{"atom":236}},{"Alternative":{"atoms":[286,322,330,331,332,333,334]}},{"Sequence":{"atoms":[285,303]}},{"Sequence":{"atoms":[283,284]}},{"Alternative":{"atoms":[280,297]}},{"Repetition":{"atom":338,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[278,279,339]}},{"Alternative":{"atoms":[340,308,310]}},{"Sequence":{"atoms":[272,341]}},{"Sequence":{"atoms":[271,314]}},{"Sequence":{"atoms":[270,317]}},{"Entity":{"atom":277}},{"Re":{"pattern":"[}]"}},{"Sequence":{"atoms":[261,262,263,267,268,269,345,346]}},{"Entity":{"atom":355}},{"Str":{"pattern":"entry"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[349,350,351,352,353,354]}},{"Entity":{"atom":413}},{"Str":{"pattern":"bindings"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":81}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Repetition":{"atom":362,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":403}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":379}},{"Entity":{"atom":20}},{"Str":{"pattern":"["}},{"Str":{"pattern":"]"}},{"Sequence":{"atoms":[371,372]}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[374,375]}},{"Alternative":{"atoms":[373,376]}},{"Repetition":{"atom":377,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[370,378]}},{"Entity":{"atom":5}},{"Str":{"pattern":"("}},{"Entity":{"atom":20}},{"Str":{"pattern":","}},{"Entity":{"atom":5}},{"Entity":{"atom":390}},{"Entity":{"atom":17}},{"Str":{"pattern":"."}},{"Str":{"pattern":"*"}},{"Alternative":{"atoms":[386,387,388]}},{"Repetition":{"atom":389,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[383,384,385]}},{"Repetition":{"atom":391,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[380,381,382,392,393]}},{"Repetition":{"atom":394,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":5}},{"Str":{"pattern":"preprocess"}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[396,397,398,399,400]}},{"Repetition":{"atom":401,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[365,366,367,368,369,395,402]}},{"Entity":{"atom":81}},{"Entity":{"atom":403}},{"Sequence":{"atoms":[404,405]}},{"Repetition":{"atom":406,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[364,407]}},{"Repetition":{"atom":408,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":81}},{"Repetition":{"atom":410,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[357,358,359,360,361,363,409,411,412]}},{"Entity":{"atom":435}},{"Str":{"pattern":"preprocess"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":81}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Repetition":{"atom":420,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":432}},{"Str":{"pattern":"table_lookup"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"->"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[423,424,425,426,427,428,429,430,431]}},{"Entity":{"atom":81}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[415,416,417,418,419,421,422,433,434]}},{"Entity":{"atom":485}},{"Str":{"pattern":"test"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[438,439]}},{"Repetition":{"atom":440,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":81}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Repetition":{"atom":444,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":476}},{"Str":{"pattern":"accept"}},{"Str":{"pattern":"reject"}},{"Str":{"pattern":"example"}},{"Alternative":{"atoms":[447,448,449]}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":5}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Repetition":{"atom":455,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":467}},{"Entity":{"atom":20}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Entity":{"atom":67}},{"Str":{"pattern":"true"}},{"Str":{"pattern":"false"}},{"Alternative":{"atoms":[463,464]}},{"Alternative":{"atoms":[461,462,465]}},{"Sequence":{"atoms":[458,459,460,466]}},{"Entity":{"atom":81}},{"Repetition":{"atom":468,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[453,454,456,457,469,470]}},{"Repetition":{"atom":471,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[450,451,452,472]}},{"Entity":{"atom":34}},{"Entity":{"atom":29}},{"Alternative":{"atoms":[473,474,475]}},{"Entity":{"atom":81}},{"Entity":{"atom":476}},{"Sequence":{"atoms":[477,478]}},{"Repetition":{"atom":479,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[446,480]}},{"Repetition":{"atom":481,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":81}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[437,441,442,443,445,482,483,484]}},{"Entity":{"atom":494}},{"Str":{"pattern":"custom"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":"="}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[487,488,489,490,491,492,493]}},{"Entity":{"atom":503}},{"Str":{"pattern":"state"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Str":{"pattern":":"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[496,497,498,499,500,501,502]}},{"Entity":{"atom":512}},{"Str":{"pattern":"glue"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[508,509]}},{"Repetition":{"atom":510,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[505,506,507,511]}},{"Entity":{"atom":29}},{"Entity":{"atom":34}},{"Alternative":{"atoms":[83,260,348,356,414,436,486,495,504,513,514]}},{"Sequence":{"atoms":[76,82]}},{"Repetition":{"atom":516,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":81}},{"Repetition":{"atom":518,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[37,38,39,40,41,42,43,73,74,75,517,519,520]}},{"Entity":{"atom":355}},{"Entity":{"atom":413}},{"Entity":{"atom":435}},{"Entity":{"atom":485}},{"Entity":{"atom":563}},{"Str":{"pattern":"render"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":81}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Entity":{"atom":558}},{"Str":{"pattern":"field"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Sequence":{"atoms":[534,535,536]}},{"Str":{"pattern":"literal"}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[538,539,540]}},{"Str":{"pattern":"cond"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":81}},{"Str":{"pattern":"{"}},{"Entity":{"atom":81}},{"Entity":{"atom":554}},{"Sequence":{"atoms":[547,548]}},{"Repetition":{"atom":549,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":81}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[542,543,544,545,546,550,551,552]}},{"Alternative":{"atoms":[537,541,553]}},{"Sequence":{"atoms":[547,548]}},{"Repetition":{"atom":555,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[542,543,544,545,546,556,551,552]}},{"Alternative":{"atoms":[537,541,557]}},{"Sequence":{"atoms":[532,533]}},{"Repetition":{"atom":559,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":81}},{"Str":{"pattern":"}"}},{"Sequence":{"atoms":[527,528,529,530,531,560,561,562]}},{"Entity":{"atom":570}},{"Str":{"pattern":"derive"}},{"Entity":{"atom":5}},{"Entity":{"atom":20}},{"Entity":{"atom":5}},{"Entity":{"atom":56}},{"Sequence":{"atoms":[565,566,567,568,569]}},{"Alternative":{"atoms":[36,522,523,524,525,526,564]}},{"Alternative":{"atoms":[7,22,30,35]}},{"Entity":{"atom":81}},{"Repetition":{"atom":573,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[6,574]}},{"Repetition":{"atom":575,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":5}},{"Sequence":{"atoms":[0,576,577]}}],"root":578},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nonl: branches 1 and 2 are order-dependent (first set not statically known)","rule str_body_char: branches 1 and 3 are order-dependent (first set not statically known)","rule str_body_char: branches 2 and 3 are order-dependent (first set not statically known)","rule hex: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule hex: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule hex: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule primary: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule bprimary: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule test_line: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 1 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 2 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule rule_line: branches 10 and 11 are order-dependent (shared first bytes; ordered choice is decisive)","rule top_item: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"file","render":{},"derive":{},"tests":[{"entry":"file","kind":"accept","input":"grammar T version \"1\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = b / c as d }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { g = [x] 3*y !z &w (p / q) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { k = 1*3(e / f) !(g h) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { custom lookback = \"ParsanolAtoms::Lookbehind\" a = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { state block_kind: symbol a = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (set block_kind = \"quote\") %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (switch block_kind { \"quote\" -> q _ -> never }) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (set d = (3*4(%x2D)) %x0A) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { a = (!(state d) %x61-7A) }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n p = {\n %i\"iso\" / %i\"ieee\"\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" { q = { a b } }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n r =\n {\n x as y\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" {\n s = {\n # a comment is body whitespace\n !(t / u) 2*v\n }\n}","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" mode \"v1\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" mode \"v2\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" edition 1 { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" edition 2 { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" edition \"v2\" { x = %x30-39 }","expect":{}},{"entry":"file","kind":"accept","input":"grammar T version \"1\" edition 2 {\n glue ws comment\n ws = 1*( %x20 )\n comment = \"#\" *nonl\n main = \"a\" ws \"b\"\n}","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { q = { a }","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { q = { } }","expect":{}},{"entry":"file","kind":"reject","input":"nonsense","expect":{}},{"entry":"file","kind":"reject","input":"grammar T version \"1\" { = }","expect":{}}],"docs":{},"source":"# PG described in PG — the self-description grammar (F10, phase 1).\n# It recognizes the language this file is written in, over raw text:\n# whitespace is threaded explicitly (pq = potential whitespace within a\n# line, nlws = line-breaking whitespace, bw = brace-body whitespace: the\n# b* rules thread it so brace-form rule bodies span lines). The\n# reference compiler remains parsanol-ruby (SSOT, TODO 11); this\n# artifact is the validator — and brace_rule below is itself written in\n# the brace form it recognizes.\n\ngrammar PgMeta version \"1.0.0\" edition 1 {\n\n # ---- lexical ----\n digit = %x30-39\n hexdig = %x30-39 / %x41-46 / %x61-66\n letter = %x41-5A / %x61-7A\n ident_char = letter / digit / %x5F\n ident = 1*ident_char\n newline = %x0A\n nonl = %x01-09 / %x0B-10FFFF\n comment = \"#\" *nonl\n doc_marker = \"##\" *nonl\n ws = %x20 / %x09\n nlws = 1*(ws / newline)\n pq = *ws\n\n # ---- terminals ----\n str_body_char = %x01-09 / %x0B-21 / %x23-10FFFF\n dstring = \"\\\"\" *(\"\\\\\" nonl / str_body_char) \"\\\"\"\n istring = \"%i\" dstring\n sstring = \"%s\" dstring\n hexdigits = 2*6hexdig\n hexlit = \"%x\" hexdigits [(\"-\" hexdigits) / 1*(\".\" hexdigits)]\n hex = hexlit / istring / sstring / dstring\n\n # ---- expressions (pq-threaded) ----\n choice = seq *(pq \"/\" pq seq)\n seq = element *(pq element)\n element = pq (rep_prefix pq [pred / postfixed] / pred / postfixed)\n rep_prefix = num [\"*\" [num]] / \"*\" [num]\n num = 1*digit\n pred = (\"!\" / \"&\") postfixed\n postfixed = primary [pq \"as\" pq ident]\n table_alt = \"alt\" pq \"from_table\" pq dstring pq \"column\" pq dstring\n set_expr = \"set\" pq ident pq \"=\" pq (dstring / \"(\" [pq] choice [pq] \")\")\n switch_arm = (dstring / \"_\") pq \"->\" pq dotted_ident\n switch_expr = \"switch\" pq ident pq \"{\" *nlws [switch_arm *(nlws switch_arm)] *nlws \"}\"\n custom_line = \"custom\" pq ident pq \"=\" pq dstring\n state_line = \"state\" pq ident pq \":\" pq ident\n dotted_ident = ident *(\".\" ident)\n primary = hex / \"(\" [pq] choice [pq] \")\" / \"[\" [pq] choice [pq] \"]\" / table_alt / set_expr / switch_expr / dotted_ident\n\n # ---- brace-body expressions (bw-threaded: newlines are whitespace) ----\n bw = *(ws / newline / comment)\n bchoice = bseq *(bw \"/\" bw bseq)\n bseq = belement *(bw belement)\n belement = bw (rep_prefix bw [bpred / bpostfixed] / bpred / bpostfixed)\n bpred = (\"!\" / \"&\") bpostfixed\n bprimary = hex / \"(\" [bw] bchoice [bw] \")\" / \"[\" [bw] bchoice [bw] \"]\" / table_alt / set_expr / switch_expr / dotted_ident\n bpostfixed = bprimary [bw \"as\" bw ident]\n\n # ---- rules and sections ----\n rule = ident pq \"=\" pq choice\n brace_rule = {\n ident pq \"=\" *(ws / newline) %x7B\n bchoice bw %x7D\n }\n entry_section = \"entry\" pq ident \":\" pq ident\n path = ident *((\"[\" \"]\") / (\".\" ident))\n cardinality = 1*(digit / \".\" / \"*\")\n binding = ident pq \"->\" pq path [pq \"(\" ident [\",\" pq cardinality] \")\"] [pq \"preprocess\" \":\" pq ident]\n bindings_section = \"bindings\" pq ident nlws \"{\" [nlws] [binding *(nlws binding)] [nlws] \"}\"\n step = \"table_lookup\" pq ident pq ident pq \"->\" pq ident\n preprocess_section = \"preprocess\" pq ident nlws \"{\" *nlws step nlws \"}\"\n test_line = (\"accept\" / \"reject\" / \"example\") pq dstring [pq \"{\" *nlws test_pair *nlws \"}\"] / comment / doc_marker\n test_pair = ident \":\" pq (dstring / num / (\"true\" / \"false\"))\n test_section = \"test\" [pq ident] nlws \"{\" *nlws [test_line *(nlws test_line)] nlws \"}\"\n rule_line = rule / brace_rule / entry_section / bindings_section / preprocess_section / test_section / custom_line / state_line / glue_line / doc_marker / comment\n edition_decl = \"mode\" pq dstring / \"edition\" pq (num / dstring)\n glue_line = \"glue\" pq ident *(pq ident)\n grammar_block = \"grammar\" pq ident pq \"version\" pq dstring [pq edition_decl] pq \"{\" *(nlws rule_line) *nlws \"}\"\n render_section = \"render\" pq ident nlws \"{\" *(nlws render_seg) nlws \"}\"\n render_seg = (\"field\" pq ident) / (\"literal\" pq dstring) / (\"cond\" pq ident nlws \"{\" *(nlws render_seg) nlws \"}\")\n derive_section = \"derive\" pq ident pq dstring\n top = grammar_block / entry_section / bindings_section / preprocess_section / test_section / render_section / derive_section\n use_line = \"use\" pq ident\n top_item = use_line / doc_marker / comment / top\n\n pg_file = pq *(top_item [nlws]) pq\n\n entry file: pg_file\n\n test {\n accept \"grammar T version \\\"1\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = b / c as d }\"\n accept \"grammar T version \\\"1\\\" { g = [x] 3*y !z &w (p / q) }\"\n accept \"grammar T version \\\"1\\\" { k = 1*3(e / f) !(g h) }\"\n accept \"grammar T version \\\"1\\\" { custom lookback = \\\"ParsanolAtoms::Lookbehind\\\" a = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { state block_kind: symbol a = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = (set block_kind = \\\"quote\\\") %x30-39 }\"\n accept \"grammar T version \\\"1\\\" { a = (switch block_kind { \\\"quote\\\" -> q _ -> never }) }\"\n accept \"grammar T version \\\"1\\\" { a = (set d = (3*4(%x2D)) %x0A) }\"\n accept \"grammar T version \\\"1\\\" { a = (!(state d) %x61-7A) }\"\n accept \"grammar T version \\\"1\\\" {\\n p = {\\n %i\\\"iso\\\" / %i\\\"ieee\\\"\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" { q = { a b } }\"\n accept \"grammar T version \\\"1\\\" {\\n r =\\n {\\n x as y\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" {\\n s = {\\n # a comment is body whitespace\\n !(t / u) 2*v\\n }\\n}\"\n accept \"grammar T version \\\"1\\\" mode \\\"v1\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" mode \\\"v2\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" edition 1 { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" edition 2 { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" edition \\\"v2\\\" { x = %x30-39 }\"\n accept \"grammar T version \\\"1\\\" edition 2 {\\n glue ws comment\\n ws = 1*( %x20 )\\n comment = \\\"#\\\" *nonl\\n main = \\\"a\\\" ws \\\"b\\\"\\n}\"\n reject \"grammar T version \\\"1\\\" { q = { a }\"\n reject \"grammar T version \\\"1\\\" { q = { } }\"\n reject \"nonsense\"\n reject \"grammar T version \\\"1\\\" { = }\"\n }\n}\n","source_hash":"a738f893d9e8521a366965a38a3230f9e09b8e120fc79b1b0bbfd21fb2163317","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.121","edition":1,"semantics_hash":"sha256:12c9a95efba271975b4967186623ace463b9b9c635a72c16195b6b2c5c5c50c5","checksum":"sha256:5ddc6e4322906cfaff4023e467769eeb4d12120a5150faaf50b2ae5f7775a003"}