pubid 2.0.0.pre.alpha.29 → 2.0.0.pre.alpha.30

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4762d9ae962591eef2454ee08fae50d3d63393bad26695a7cf8efa33611d607a
4
- data.tar.gz: 69dbbc0f2a6cbf1b54d32ecedbf76784722f934143665ea668453e5768760b16
3
+ metadata.gz: e222f0cdae2f69510f94b2bca68b6ad9be80b3234e2665b7e840d5523d666083
4
+ data.tar.gz: 7408c9ea361c0705ca567a6a46c5b43c25092d1dbfded28deaa31b00d803c306
5
5
  SHA512:
6
- metadata.gz: 1ff28f3d37507cea7fc3530965a1dffe5c676d43059ee0355a3cf34cfa8ad8c015d08bead44cd6d1c5eb389f5173169456ff661c6a076a9fd9c083d1a6050a44
7
- data.tar.gz: 8841beea4019470c6045ff9ef9c21a0e7dc18e18d8c97e04fa36888c3ba2700a2edabae0e2f30098a40cd51b0a5fd4bd3589c399be5c93046b5a252c9b759651
6
+ metadata.gz: 6a99e6b105df7f44b39d8c9c93c425f1d3d464b0baf84896572abef81bd6be799f3c29fd0782335ada20b74158823a6b93288ec994046fd6511264bcdb42f7cd
7
+ data.tar.gz: a045a8211c9b1702e5e39f92c281d6fdfc99dbf1aef15e5470c52d5cf4d33f0aeb8f544f050f09b70a97f06e37476a95646c6e8aff3b27855c0cb57c766d51ba
@@ -1 +1 @@
1
- {"version":"0.1.0","grammar":"PubidCenCenelec","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":99}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":33}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":19}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"copublisher","atom":20}},{"Sequence":{"atoms":[18,21]}},{"Repetition":{"atom":22,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,23]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":25}},{"Entity":{"atom":19}},{"Str":{"pattern":"CEN"}},{"Named":{"name":"copublisher","atom":28}},{"Sequence":{"atoms":[27,29]}},{"Repetition":{"atom":30,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[26,31]}},{"Alternative":{"atoms":[13,24,32]}},{"Alternative":{"atoms":[1,6]}},{"Entity":{"atom":36}},{"Str":{"pattern":" "}},{"Entity":{"atom":41}},{"Entity":{"atom":39}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":38,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":40}},{"Entity":{"atom":53}},{"Entity":{"atom":51}},{"Entity":{"atom":45}},{"Str":{"pattern":"-"}},{"Entity":{"atom":39}},{"Entity":{"atom":45}},{"Alternative":{"atoms":[46,47]}},{"Repetition":{"atom":48,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":49}},{"Sequence":{"atoms":[44,50]}},{"Repetition":{"atom":43,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":52}},{"Entity":{"atom":36}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":39}},{"Repetition":{"atom":56,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":57}},{"Entity":{"atom":36}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":39}},{"Repetition":{"atom":61,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":62}},{"Sequence":{"atoms":[34,35,37,42,54,55,58,59,60,63]}},{"Entity":{"atom":5}},{"Entity":{"atom":33}},{"Alternative":{"atoms":[65,66]}},{"Entity":{"atom":36}},{"Entity":{"atom":41}},{"Entity":{"atom":53}},{"Entity":{"atom":77}},{"Entity":{"atom":73}},{"Str":{"pattern":":"}},{"Entity":{"atom":39}},{"Repetition":{"atom":74,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":75}},{"Sequence":{"atoms":[72,76]}},{"Repetition":{"atom":71,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":80}},{"Str":{"pattern":"+"}},{"Entity":{"atom":19}},{"Alternative":{"atoms":[79,81]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":39}},{"Repetition":{"atom":84,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":85}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":88,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":89}},{"Sequence":{"atoms":[87,90]}},{"Repetition":{"atom":91,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":39}},{"Repetition":{"atom":95,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":96}},{"Sequence":{"atoms":[67,68,69,70,78,82,83,86,92,93,94,97]}},{"Alternative":{"atoms":[64,98]}},{"Entity":{"atom":5}},{"Entity":{"atom":33}},{"Alternative":{"atoms":[100,101]}},{"Entity":{"atom":36}},{"Entity":{"atom":189}},{"Entity":{"atom":109}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[106,107,108]}},{"Entity":{"atom":172}},{"Entity":{"atom":127}},{"Entity":{"atom":80}},{"Named":{"name":"amd_sep_plus","atom":112}},{"Entity":{"atom":19}},{"Named":{"name":"amd_sep_slash","atom":114}},{"Alternative":{"atoms":[113,115]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":39}},{"Repetition":{"atom":118,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":119}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":122,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":123}},{"Sequence":{"atoms":[121,124]}},{"Repetition":{"atom":125,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[116,117,120,126]}},{"Entity":{"atom":170}},{"Entity":{"atom":80}},{"Named":{"name":"amd_sep_plus","atom":129}},{"Entity":{"atom":19}},{"Named":{"name":"amd_sep_slash","atom":131}},{"Alternative":{"atoms":[130,132]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":39}},{"Entity":{"atom":39}},{"Repetition":{"atom":136,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[135,137]}},{"Named":{"name":"cor_number","atom":138}},{"Repetition":{"atom":139,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":162}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":143,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":144}},{"Entity":{"atom":45}},{"Entity":{"atom":161}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[148,149,150,151,152,153,154,155,156,157,158,159]}},{"Named":{"name":"month","atom":160}},{"Sequence":{"atoms":[142,145,146,147]}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":164,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":165}},{"Sequence":{"atoms":[163,166]}},{"Alternative":{"atoms":[141,167]}},{"Repetition":{"atom":168,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[133,134,140,169]}},{"Alternative":{"atoms":[111,128]}},{"Named":{"name":"supplement","atom":171}},{"Lookahead":{"atom":110,"positive":false}},{"Entity":{"atom":180}},{"Entity":{"atom":36}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":39}},{"Repetition":{"atom":177,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":178}},{"Sequence":{"atoms":[175,176,179]}},{"Lookahead":{"atom":174,"positive":false}},{"Entity":{"atom":185}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[183,184]}},{"Sequence":{"atoms":[173,181,182]}},{"Repetition":{"atom":186,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[105,187]}},{"Named":{"name":"adopted_string","atom":188}},{"Sequence":{"atoms":[103,104]}},{"Repetition":{"atom":190,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Entity":{"atom":199}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[194,195,196,197]}},{"Named":{"name":"type","atom":198}},{"Sequence":{"atoms":[192,193]}},{"Entity":{"atom":19}},{"Entity":{"atom":199}},{"Sequence":{"atoms":[201,202]}},{"Alternative":{"atoms":[200,203]}},{"Repetition":{"atom":204,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Entity":{"atom":41}},{"Entity":{"atom":53}},{"Entity":{"atom":77}},{"Repetition":{"atom":209,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[206,207,208,210]}},{"Repetition":{"atom":211,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":216}},{"Entity":{"atom":172}},{"Repetition":{"atom":214,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":215}},{"Entity":{"atom":180}},{"Repetition":{"atom":217,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[102,191,205,212,213,218]}},{"Alternative":{"atoms":[0,219]}}],"root":220},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule adopted_org_prefix: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule any_noln_char: branches 1 and 2 are order-dependent (first set not statically known)","rule fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","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":"EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/cen_cenelec/parser.rb. Pre-parse normalization\n# (U+2011/AD dashes, comment stripping, CEN-CLC/GUIDE forms) stays\n# binder-side: the grammar sees normalized input.\n\ngrammar PubidCenCenelec version \"0.1.0\" {\n digit = %x30-39\n space = \" \"\n dash = \"-\"\n slash = \"/\"\n plus = \"+\"\n colon = \":\"\n publisher = ((\"CWA\" / \"HD\" / \"ES\" / \"CR\" / \"ENV\") as publisher) / ((\"EN\" / \"CEN\") as publisher [slash \"CLC\" as copublisher]) / (\"CLC\" as publisher [slash \"CEN\" as copublisher])\n stage_prefix = (\"FprEN\" / \"prEN\") as type_with_stage\n type = (\"Guide\" / \"GUIDE\" / \"TR\" / \"TS\") as type\n number = (1*digit) as number\n part = dash (1*(digit / dash)) as part\n parts = (*part) as parts\n month_digits = (\"01\" / \"02\" / \"03\" / \"04\" / \"05\" / \"06\" / \"07\" / \"08\" / \"09\" / \"10\" / \"11\" / \"12\") as month\n year = colon (4digit) as year\n year_with_month = colon (4digit) as year dash month_digits\n date = year_with_month / year\n amendment = (plus as amd_sep_plus / slash as amd_sep_slash) \"A\" (1*digit) as amd_number [(colon (4digit) as amd_year)]\n corrigendum = (plus as amd_sep_plus / slash as amd_sep_slash) \"AC\" [(digit (*digit)) as cor_number] [(year_with_month / (colon (4digit) as year))]\n supplement = (amendment / corrigendum) as supplement\n supplements = (*supplement) as supplements\n edition = space \"ED\" (1*digit) as edition\n adopted_org_prefix = \"ISO\" / \"IEC\" / \"CISPR\"\n adopted_string = (adopted_org_prefix *(!supplement !edition any_noln_char)) as adopted_string\n any_noln_char = %x01-09 / %x0B-10FFFF\n fragment_identifier = ((stage_prefix / publisher) space number parts space \"AMD\" (1*digit) as amendment_number space \"FRAG\" (1*digit) as fragment_number) / ((stage_prefix / publisher) space number parts [year] (plus / slash) \"A\" (1*digit) as amendment_number [(colon (4digit) as amendment_year)] space \"FRAG\" (1*digit) as fragment_number)\n identifier = fragment_identifier / ((stage_prefix / publisher) [(space adopted_string)] [(space type / slash type)] [(space number parts [year])] supplements [edition])\n\n entry identifier: identifier\n\n test {\n accept \"EN 18216:2026\"\n accept \"EN ISO 9001:2015\"\n accept \"CEN/CLC TR 17161:2019\"\n accept \"EN 196-1:2016+A1\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:b12de1a57719805a7462df8d4df9233e544a5d4366a3f85def638a6be6f91572"}
1
+ {"bindings":null,"version":"0.2.0","grammar":"PubidCenCenelec","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":108}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":36}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":28}},{"Entity":{"atom":26}},{"Entity":{"atom":21}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Str":{"pattern":"ETSI"}},{"Alternative":{"atoms":[22,23]}},{"Named":{"name":"copublisher","atom":24}},{"Sequence":{"atoms":[20,25]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"copublishers","atom":27}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,29]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":31}},{"Entity":{"atom":28}},{"Repetition":{"atom":33,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,34]}},{"Alternative":{"atoms":[13,30,35]}},{"Alternative":{"atoms":[1,6]}},{"Entity":{"atom":39}},{"Str":{"pattern":" "}},{"Entity":{"atom":50}},{"Entity":{"atom":42}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":41,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":39}},{"Entity":{"atom":42}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[44,46]}},{"Repetition":{"atom":47,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[43,48]}},{"Named":{"name":"number","atom":49}},{"Entity":{"atom":62}},{"Entity":{"atom":60}},{"Entity":{"atom":54}},{"Str":{"pattern":"-"}},{"Entity":{"atom":42}},{"Entity":{"atom":54}},{"Alternative":{"atoms":[55,56]}},{"Repetition":{"atom":57,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":58}},{"Sequence":{"atoms":[53,59]}},{"Repetition":{"atom":52,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":61}},{"Entity":{"atom":39}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":42}},{"Repetition":{"atom":65,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":66}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":71}},{"Sequence":{"atoms":[37,38,40,51,63,64,67,68,69,72]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[74,75]}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":86}},{"Entity":{"atom":82}},{"Str":{"pattern":":"}},{"Entity":{"atom":42}},{"Repetition":{"atom":83,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":84}},{"Sequence":{"atoms":[81,85]}},{"Repetition":{"atom":80,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":89}},{"Str":{"pattern":"+"}},{"Entity":{"atom":21}},{"Alternative":{"atoms":[88,90]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":93,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":94}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":98}},{"Sequence":{"atoms":[96,99]}},{"Repetition":{"atom":100,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":105}},{"Sequence":{"atoms":[76,77,78,79,87,91,92,95,101,102,103,106]}},{"Alternative":{"atoms":[73,107]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[109,110]}},{"Entity":{"atom":39}},{"Entity":{"atom":198}},{"Entity":{"atom":118}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[115,116,117]}},{"Entity":{"atom":181}},{"Entity":{"atom":136}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":121}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":123}},{"Alternative":{"atoms":[122,124]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":127,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":128}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":131,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":132}},{"Sequence":{"atoms":[130,133]}},{"Repetition":{"atom":134,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[125,126,129,135]}},{"Entity":{"atom":179}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":138}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":140}},{"Alternative":{"atoms":[139,141]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":42}},{"Entity":{"atom":42}},{"Repetition":{"atom":145,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[144,146]}},{"Named":{"name":"cor_number","atom":147}},{"Repetition":{"atom":148,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":171}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":152,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":153}},{"Entity":{"atom":54}},{"Entity":{"atom":170}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[157,158,159,160,161,162,163,164,165,166,167,168]}},{"Named":{"name":"month","atom":169}},{"Sequence":{"atoms":[151,154,155,156]}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Sequence":{"atoms":[172,175]}},{"Alternative":{"atoms":[150,176]}},{"Repetition":{"atom":177,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[142,143,149,178]}},{"Alternative":{"atoms":[120,137]}},{"Named":{"name":"supplement","atom":180}},{"Lookahead":{"atom":119,"positive":false}},{"Entity":{"atom":189}},{"Entity":{"atom":39}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":42}},{"Repetition":{"atom":186,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[184,185,188]}},{"Lookahead":{"atom":183,"positive":false}},{"Entity":{"atom":194}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[192,193]}},{"Sequence":{"atoms":[182,190,191]}},{"Repetition":{"atom":195,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[114,196]}},{"Named":{"name":"adopted_string","atom":197}},{"Sequence":{"atoms":[112,113]}},{"Repetition":{"atom":199,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":208}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[203,204,205,206]}},{"Named":{"name":"type","atom":207}},{"Sequence":{"atoms":[201,202]}},{"Entity":{"atom":21}},{"Entity":{"atom":208}},{"Sequence":{"atoms":[210,211]}},{"Alternative":{"atoms":[209,212]}},{"Repetition":{"atom":213,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":230}},{"Entity":{"atom":39}},{"Str":{"pattern":"V"}},{"Entity":{"atom":42}},{"Repetition":{"atom":221,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":224,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":227,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[219,220,222,223,225,226,228]}},{"Named":{"name":"version","atom":229}},{"Repetition":{"atom":218,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":86}},{"Repetition":{"atom":232,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[215,216,217,231,233]}},{"Repetition":{"atom":234,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":239}},{"Entity":{"atom":181}},{"Repetition":{"atom":237,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":238}},{"Entity":{"atom":189}},{"Repetition":{"atom":240,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[111,200,214,235,236,241]}},{"Alternative":{"atoms":[0,242]}}],"root":243},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule adopted_org_prefix: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule any_noln_char: branches 1 and 2 are order-dependent (first set not statically known)","rule fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","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":"EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC/ETSI/TR 101551:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2 V2.2.1","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326 V2.2.1:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302:2026","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/cen_cenelec/parser.rb. Pre-parse normalization\n# (U+2011/AD dashes, comment stripping, CEN-CLC/GUIDE forms) stays\n# binder-side: the grammar sees normalized input.\n\ngrammar PubidCenCenelec version \"0.2.0\" {\n digit = %x30-39\n space = \" \"\n dash = \"-\"\n slash = \"/\"\n plus = \"+\"\n colon = \":\"\n publisher = ((\"CWA\" / \"HD\" / \"ES\" / \"CR\" / \"ENV\") as publisher) / ((\"EN\" / \"CEN\") as publisher [copublishers]) / (\"CLC\" as publisher [copublishers])\n copublishers = (1*copublisher) as copublishers\n copublisher = (slash (\"CLC\" / \"ETSI\") as copublisher)\n stage_prefix = (\"FprEN\" / \"prEN\") as type_with_stage\n type = (\"Guide\" / \"GUIDE\" / \"TR\" / \"TS\") as type\n number = ((1*digit) (*(space (1*digit)))) as number\n version = (space \"V\" (1*digit) \".\" (1*digit) \".\" (1*digit)) as version\n part = dash (1*(digit / dash)) as part\n parts = (*part) as parts\n month_digits = (\"01\" / \"02\" / \"03\" / \"04\" / \"05\" / \"06\" / \"07\" / \"08\" / \"09\" / \"10\" / \"11\" / \"12\") as month\n year = colon (4digit) as year\n year_with_month = colon (4digit) as year dash month_digits\n date = year_with_month / year\n amendment = (plus as amd_sep_plus / slash as amd_sep_slash) \"A\" (1*digit) as amd_number [(colon (4digit) as amd_year)]\n corrigendum = (plus as amd_sep_plus / slash as amd_sep_slash) \"AC\" [(digit (*digit)) as cor_number] [(year_with_month / (colon (4digit) as year))]\n supplement = (amendment / corrigendum) as supplement\n supplements = (*supplement) as supplements\n edition = space \"ED\" (1*digit) as edition\n adopted_org_prefix = \"ISO\" / \"IEC\" / \"CISPR\"\n adopted_string = (adopted_org_prefix *(!supplement !edition any_noln_char)) as adopted_string\n any_noln_char = %x01-09 / %x0B-10FFFF\n fragment_identifier = ((stage_prefix / publisher) space number parts space \"AMD\" (1*digit) as amendment_number space \"FRAG\" (1*digit) as fragment_number) / ((stage_prefix / publisher) space number parts [year] (plus / slash) \"A\" (1*digit) as amendment_number [(colon (4digit) as amendment_year)] space \"FRAG\" (1*digit) as fragment_number)\n identifier = fragment_identifier / ((stage_prefix / publisher) [(space adopted_string)] [(space type / slash type)] [(space number parts [version] [year])] supplements [edition])\n\n entry identifier: identifier\n\n test {\n accept \"EN 18216:2026\"\n accept \"EN ISO 9001:2015\"\n accept \"CEN/CLC TR 17161:2019\"\n accept \"EN 196-1:2016+A1\"\n accept \"CEN/CLC/ETSI/TR 101551:2026\"\n accept \"EN 302 326-2:2026\"\n accept \"EN 302 326-2 V2.2.1\"\n accept \"EN 302 326 V2.2.1:2026\"\n accept \"EN 302:2026\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:037cbc3a56e9a6f997d83b0407af21c8b77d4f39e5f209d8e5f20e8a5c5b23f3"}
@@ -2,17 +2,20 @@
2
2
  # (U+2011/AD dashes, comment stripping, CEN-CLC/GUIDE forms) stays
3
3
  # binder-side: the grammar sees normalized input.
4
4
 
5
- grammar PubidCenCenelec version "0.1.0" {
5
+ grammar PubidCenCenelec version "0.2.0" {
6
6
  digit = %x30-39
7
7
  space = " "
8
8
  dash = "-"
9
9
  slash = "/"
10
10
  plus = "+"
11
11
  colon = ":"
12
- publisher = (("CWA" / "HD" / "ES" / "CR" / "ENV") as publisher) / (("EN" / "CEN") as publisher [slash "CLC" as copublisher]) / ("CLC" as publisher [slash "CEN" as copublisher])
12
+ publisher = (("CWA" / "HD" / "ES" / "CR" / "ENV") as publisher) / (("EN" / "CEN") as publisher [copublishers]) / ("CLC" as publisher [copublishers])
13
+ copublishers = (1*copublisher) as copublishers
14
+ copublisher = (slash ("CLC" / "ETSI") as copublisher)
13
15
  stage_prefix = ("FprEN" / "prEN") as type_with_stage
14
16
  type = ("Guide" / "GUIDE" / "TR" / "TS") as type
15
- number = (1*digit) as number
17
+ number = ((1*digit) (*(space (1*digit)))) as number
18
+ version = (space "V" (1*digit) "." (1*digit) "." (1*digit)) as version
16
19
  part = dash (1*(digit / dash)) as part
17
20
  parts = (*part) as parts
18
21
  month_digits = ("01" / "02" / "03" / "04" / "05" / "06" / "07" / "08" / "09" / "10" / "11" / "12") as month
@@ -28,7 +31,7 @@ grammar PubidCenCenelec version "0.1.0" {
28
31
  adopted_string = (adopted_org_prefix *(!supplement !edition any_noln_char)) as adopted_string
29
32
  any_noln_char = %x01-09 / %x0B-10FFFF
30
33
  fragment_identifier = ((stage_prefix / publisher) space number parts space "AMD" (1*digit) as amendment_number space "FRAG" (1*digit) as fragment_number) / ((stage_prefix / publisher) space number parts [year] (plus / slash) "A" (1*digit) as amendment_number [(colon (4digit) as amendment_year)] space "FRAG" (1*digit) as fragment_number)
31
- identifier = fragment_identifier / ((stage_prefix / publisher) [(space adopted_string)] [(space type / slash type)] [(space number parts [year])] supplements [edition])
34
+ identifier = fragment_identifier / ((stage_prefix / publisher) [(space adopted_string)] [(space type / slash type)] [(space number parts [version] [year])] supplements [edition])
32
35
 
33
36
  entry identifier: identifier
34
37
 
@@ -37,6 +40,11 @@ grammar PubidCenCenelec version "0.1.0" {
37
40
  accept "EN ISO 9001:2015"
38
41
  accept "CEN/CLC TR 17161:2019"
39
42
  accept "EN 196-1:2016+A1"
43
+ accept "CEN/CLC/ETSI/TR 101551:2026"
44
+ accept "EN 302 326-2:2026"
45
+ accept "EN 302 326-2 V2.2.1"
46
+ accept "EN 302 326 V2.2.1:2026"
47
+ accept "EN 302:2026"
40
48
  reject "nonsense"
41
49
  }
42
50
  }
data/data/parg/evs.json CHANGED
@@ -1 +1 @@
1
- {"version":"0.2.0","grammar":"PubidEvs","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"EVS"}},{"Entity":{"atom":7}},{"Entity":{"atom":3}},{"Str":{"pattern":"-"}},{"Entity":{"atom":5}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[2,4]}},{"Named":{"name":"evs_separator","atom":6}},{"Entity":{"atom":229}},{"Entity":{"atom":108}},{"Entity":{"atom":14}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[11,12]}},{"Named":{"name":"type_with_stage","atom":13}},{"Entity":{"atom":42}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[16,17,18,19,20]}},{"Named":{"name":"publisher","atom":21}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[23,24]}},{"Named":{"name":"publisher","atom":25}},{"Entity":{"atom":28}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"copublisher","atom":29}},{"Sequence":{"atoms":[27,30]}},{"Repetition":{"atom":31,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[26,32]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":34}},{"Entity":{"atom":28}},{"Str":{"pattern":"CEN"}},{"Named":{"name":"copublisher","atom":37}},{"Sequence":{"atoms":[36,38]}},{"Repetition":{"atom":39,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[35,40]}},{"Alternative":{"atoms":[22,33,41]}},{"Alternative":{"atoms":[10,15]}},{"Entity":{"atom":45}},{"Str":{"pattern":" "}},{"Entity":{"atom":50}},{"Entity":{"atom":48}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":47,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":49}},{"Entity":{"atom":62}},{"Entity":{"atom":60}},{"Entity":{"atom":54}},{"Str":{"pattern":"-"}},{"Entity":{"atom":48}},{"Entity":{"atom":54}},{"Alternative":{"atoms":[55,56]}},{"Repetition":{"atom":57,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":58}},{"Sequence":{"atoms":[53,59]}},{"Repetition":{"atom":52,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":61}},{"Entity":{"atom":45}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":48}},{"Repetition":{"atom":65,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":66}},{"Entity":{"atom":45}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":48}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":71}},{"Sequence":{"atoms":[43,44,46,51,63,64,67,68,69,72]}},{"Entity":{"atom":14}},{"Entity":{"atom":42}},{"Alternative":{"atoms":[74,75]}},{"Entity":{"atom":45}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":86}},{"Entity":{"atom":82}},{"Str":{"pattern":":"}},{"Entity":{"atom":48}},{"Repetition":{"atom":83,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":84}},{"Sequence":{"atoms":[81,85]}},{"Repetition":{"atom":80,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":89}},{"Str":{"pattern":"+"}},{"Entity":{"atom":28}},{"Alternative":{"atoms":[88,90]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":48}},{"Repetition":{"atom":93,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":94}},{"Entity":{"atom":82}},{"Entity":{"atom":48}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":98}},{"Sequence":{"atoms":[96,99]}},{"Repetition":{"atom":100,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":45}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":48}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":105}},{"Sequence":{"atoms":[76,77,78,79,87,91,92,95,101,102,103,106]}},{"Alternative":{"atoms":[73,107]}},{"Entity":{"atom":14}},{"Entity":{"atom":42}},{"Alternative":{"atoms":[109,110]}},{"Entity":{"atom":45}},{"Entity":{"atom":198}},{"Entity":{"atom":118}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[115,116,117]}},{"Entity":{"atom":181}},{"Entity":{"atom":136}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":121}},{"Entity":{"atom":28}},{"Named":{"name":"amd_sep_slash","atom":123}},{"Alternative":{"atoms":[122,124]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":48}},{"Repetition":{"atom":127,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":128}},{"Entity":{"atom":82}},{"Entity":{"atom":48}},{"Repetition":{"atom":131,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":132}},{"Sequence":{"atoms":[130,133]}},{"Repetition":{"atom":134,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[125,126,129,135]}},{"Entity":{"atom":179}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":138}},{"Entity":{"atom":28}},{"Named":{"name":"amd_sep_slash","atom":140}},{"Alternative":{"atoms":[139,141]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":48}},{"Entity":{"atom":48}},{"Repetition":{"atom":145,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[144,146]}},{"Named":{"name":"cor_number","atom":147}},{"Repetition":{"atom":148,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":171}},{"Entity":{"atom":82}},{"Entity":{"atom":48}},{"Repetition":{"atom":152,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":153}},{"Entity":{"atom":54}},{"Entity":{"atom":170}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[157,158,159,160,161,162,163,164,165,166,167,168]}},{"Named":{"name":"month","atom":169}},{"Sequence":{"atoms":[151,154,155,156]}},{"Entity":{"atom":82}},{"Entity":{"atom":48}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Sequence":{"atoms":[172,175]}},{"Alternative":{"atoms":[150,176]}},{"Repetition":{"atom":177,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[142,143,149,178]}},{"Alternative":{"atoms":[120,137]}},{"Named":{"name":"supplement","atom":180}},{"Lookahead":{"atom":119,"positive":false}},{"Entity":{"atom":189}},{"Entity":{"atom":45}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":48}},{"Repetition":{"atom":186,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[184,185,188]}},{"Lookahead":{"atom":183,"positive":false}},{"Entity":{"atom":194}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[192,193]}},{"Sequence":{"atoms":[182,190,191]}},{"Repetition":{"atom":195,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[114,196]}},{"Named":{"name":"adopted_string","atom":197}},{"Sequence":{"atoms":[112,113]}},{"Repetition":{"atom":199,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":45}},{"Entity":{"atom":208}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[203,204,205,206]}},{"Named":{"name":"type","atom":207}},{"Sequence":{"atoms":[201,202]}},{"Entity":{"atom":28}},{"Entity":{"atom":208}},{"Sequence":{"atoms":[210,211]}},{"Alternative":{"atoms":[209,212]}},{"Repetition":{"atom":213,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":45}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":86}},{"Repetition":{"atom":218,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[215,216,217,219]}},{"Repetition":{"atom":220,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":225}},{"Entity":{"atom":181}},{"Repetition":{"atom":223,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":224}},{"Entity":{"atom":189}},{"Repetition":{"atom":226,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[111,200,214,221,222,227]}},{"Alternative":{"atoms":[9,228]}},{"Named":{"name":"adopted","atom":8}},{"Sequence":{"atoms":[0,1,230]}}],"root":231},"bindings":[]},"cen_cenelec.identifier":{"root":"cen_cenelec.identifier","grammar":{"atoms":[{"Entity":{"atom":99}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":33}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":19}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"copublisher","atom":20}},{"Sequence":{"atoms":[18,21]}},{"Repetition":{"atom":22,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,23]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":25}},{"Entity":{"atom":19}},{"Str":{"pattern":"CEN"}},{"Named":{"name":"copublisher","atom":28}},{"Sequence":{"atoms":[27,29]}},{"Repetition":{"atom":30,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[26,31]}},{"Alternative":{"atoms":[13,24,32]}},{"Alternative":{"atoms":[1,6]}},{"Entity":{"atom":36}},{"Str":{"pattern":" "}},{"Entity":{"atom":41}},{"Entity":{"atom":39}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":38,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":40}},{"Entity":{"atom":53}},{"Entity":{"atom":51}},{"Entity":{"atom":45}},{"Str":{"pattern":"-"}},{"Entity":{"atom":39}},{"Entity":{"atom":45}},{"Alternative":{"atoms":[46,47]}},{"Repetition":{"atom":48,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":49}},{"Sequence":{"atoms":[44,50]}},{"Repetition":{"atom":43,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":52}},{"Entity":{"atom":36}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":39}},{"Repetition":{"atom":56,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":57}},{"Entity":{"atom":36}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":39}},{"Repetition":{"atom":61,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":62}},{"Sequence":{"atoms":[34,35,37,42,54,55,58,59,60,63]}},{"Entity":{"atom":5}},{"Entity":{"atom":33}},{"Alternative":{"atoms":[65,66]}},{"Entity":{"atom":36}},{"Entity":{"atom":41}},{"Entity":{"atom":53}},{"Entity":{"atom":77}},{"Entity":{"atom":73}},{"Str":{"pattern":":"}},{"Entity":{"atom":39}},{"Repetition":{"atom":74,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":75}},{"Sequence":{"atoms":[72,76]}},{"Repetition":{"atom":71,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":80}},{"Str":{"pattern":"+"}},{"Entity":{"atom":19}},{"Alternative":{"atoms":[79,81]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":39}},{"Repetition":{"atom":84,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":85}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":88,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":89}},{"Sequence":{"atoms":[87,90]}},{"Repetition":{"atom":91,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":39}},{"Repetition":{"atom":95,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":96}},{"Sequence":{"atoms":[67,68,69,70,78,82,83,86,92,93,94,97]}},{"Alternative":{"atoms":[64,98]}},{"Entity":{"atom":5}},{"Entity":{"atom":33}},{"Alternative":{"atoms":[100,101]}},{"Entity":{"atom":36}},{"Entity":{"atom":189}},{"Entity":{"atom":109}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[106,107,108]}},{"Entity":{"atom":172}},{"Entity":{"atom":127}},{"Entity":{"atom":80}},{"Named":{"name":"amd_sep_plus","atom":112}},{"Entity":{"atom":19}},{"Named":{"name":"amd_sep_slash","atom":114}},{"Alternative":{"atoms":[113,115]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":39}},{"Repetition":{"atom":118,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":119}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":122,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":123}},{"Sequence":{"atoms":[121,124]}},{"Repetition":{"atom":125,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[116,117,120,126]}},{"Entity":{"atom":170}},{"Entity":{"atom":80}},{"Named":{"name":"amd_sep_plus","atom":129}},{"Entity":{"atom":19}},{"Named":{"name":"amd_sep_slash","atom":131}},{"Alternative":{"atoms":[130,132]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":39}},{"Entity":{"atom":39}},{"Repetition":{"atom":136,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[135,137]}},{"Named":{"name":"cor_number","atom":138}},{"Repetition":{"atom":139,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":162}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":143,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":144}},{"Entity":{"atom":45}},{"Entity":{"atom":161}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[148,149,150,151,152,153,154,155,156,157,158,159]}},{"Named":{"name":"month","atom":160}},{"Sequence":{"atoms":[142,145,146,147]}},{"Entity":{"atom":73}},{"Entity":{"atom":39}},{"Repetition":{"atom":164,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":165}},{"Sequence":{"atoms":[163,166]}},{"Alternative":{"atoms":[141,167]}},{"Repetition":{"atom":168,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[133,134,140,169]}},{"Alternative":{"atoms":[111,128]}},{"Named":{"name":"supplement","atom":171}},{"Lookahead":{"atom":110,"positive":false}},{"Entity":{"atom":180}},{"Entity":{"atom":36}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":39}},{"Repetition":{"atom":177,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":178}},{"Sequence":{"atoms":[175,176,179]}},{"Lookahead":{"atom":174,"positive":false}},{"Entity":{"atom":185}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[183,184]}},{"Sequence":{"atoms":[173,181,182]}},{"Repetition":{"atom":186,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[105,187]}},{"Named":{"name":"adopted_string","atom":188}},{"Sequence":{"atoms":[103,104]}},{"Repetition":{"atom":190,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Entity":{"atom":199}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[194,195,196,197]}},{"Named":{"name":"type","atom":198}},{"Sequence":{"atoms":[192,193]}},{"Entity":{"atom":19}},{"Entity":{"atom":199}},{"Sequence":{"atoms":[201,202]}},{"Alternative":{"atoms":[200,203]}},{"Repetition":{"atom":204,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":36}},{"Entity":{"atom":41}},{"Entity":{"atom":53}},{"Entity":{"atom":77}},{"Repetition":{"atom":209,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[206,207,208,210]}},{"Repetition":{"atom":211,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":216}},{"Entity":{"atom":172}},{"Repetition":{"atom":214,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":215}},{"Entity":{"atom":180}},{"Repetition":{"atom":217,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[102,191,205,212,213,218]}},{"Alternative":{"atoms":[0,219]}}],"root":220},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule cen_cenelec.publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.publisher: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.adopted_org_prefix: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.any_noln_char: branches 1 and 2 are order-dependent (first set not statically known)","rule cen_cenelec.fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.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":"EVS-EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN ISO 9001:2015/A1:2024","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS EN 196-1:2016","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 18216:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"cen_cenelec.identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/evs/parser.rb: the EVS national-adoption wrapper\n# around the CEN/CENELEC grammar — \"EVS\" (\"-\" | \" \") <CEN identifier>.\n# The CEN spine is IMPORTED via `use` (TODO 11/C6 imports): rules are\n# namespaced cen_cenelec.* while captures keep their contract names.\n\nuse cen_cenelec\n\ngrammar PubidEvs version \"0.2.0\" {\n evs_separator = (dash / space) as evs_separator\n identifier = \"EVS\" evs_separator (cen_cenelec.identifier) as adopted\n\n dash = \"-\"\n space = \" \"\n\n entry identifier: identifier\n\n test {\n accept \"EVS-EN 18216:2026\"\n accept \"EVS-EN ISO 9001:2015/A1:2024\"\n accept \"EVS EN 196-1:2016\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:0959b1242f482a49502313f887374d665a7d67c3952ac6741402bf6e0e1cc6cb"}
1
+ {"bindings":null,"version":"0.3.0","grammar":"PubidEvs","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":2}},{"Str":{"pattern":"pr"}},{"Named":{"name":"draft_prefix","atom":1}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"EVS"}},{"Entity":{"atom":11}},{"Entity":{"atom":7}},{"Str":{"pattern":"-"}},{"Entity":{"atom":9}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[6,8]}},{"Named":{"name":"evs_separator","atom":10}},{"Entity":{"atom":256}},{"Entity":{"atom":121}},{"Entity":{"atom":18}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[15,16]}},{"Named":{"name":"type_with_stage","atom":17}},{"Entity":{"atom":49}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[20,21,22,23,24]}},{"Named":{"name":"publisher","atom":25}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[27,28]}},{"Named":{"name":"publisher","atom":29}},{"Entity":{"atom":41}},{"Entity":{"atom":39}},{"Entity":{"atom":34}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Str":{"pattern":"ETSI"}},{"Alternative":{"atoms":[35,36]}},{"Named":{"name":"copublisher","atom":37}},{"Sequence":{"atoms":[33,38]}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"copublishers","atom":40}},{"Repetition":{"atom":31,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[30,42]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":44}},{"Entity":{"atom":41}},{"Repetition":{"atom":46,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[45,47]}},{"Alternative":{"atoms":[26,43,48]}},{"Alternative":{"atoms":[14,19]}},{"Entity":{"atom":52}},{"Str":{"pattern":" "}},{"Entity":{"atom":63}},{"Entity":{"atom":55}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":54,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":52}},{"Entity":{"atom":55}},{"Repetition":{"atom":58,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[57,59]}},{"Repetition":{"atom":60,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[56,61]}},{"Named":{"name":"number","atom":62}},{"Entity":{"atom":75}},{"Entity":{"atom":73}},{"Entity":{"atom":67}},{"Str":{"pattern":"-"}},{"Entity":{"atom":55}},{"Entity":{"atom":67}},{"Alternative":{"atoms":[68,69]}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":71}},{"Sequence":{"atoms":[66,72]}},{"Repetition":{"atom":65,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":74}},{"Entity":{"atom":52}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":55}},{"Repetition":{"atom":78,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":79}},{"Entity":{"atom":52}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":55}},{"Repetition":{"atom":83,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":84}},{"Sequence":{"atoms":[50,51,53,64,76,77,80,81,82,85]}},{"Entity":{"atom":18}},{"Entity":{"atom":49}},{"Alternative":{"atoms":[87,88]}},{"Entity":{"atom":52}},{"Entity":{"atom":63}},{"Entity":{"atom":75}},{"Entity":{"atom":99}},{"Entity":{"atom":95}},{"Str":{"pattern":":"}},{"Entity":{"atom":55}},{"Repetition":{"atom":96,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":97}},{"Sequence":{"atoms":[94,98]}},{"Repetition":{"atom":93,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":102}},{"Str":{"pattern":"+"}},{"Entity":{"atom":34}},{"Alternative":{"atoms":[101,103]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":55}},{"Repetition":{"atom":106,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":107}},{"Entity":{"atom":95}},{"Entity":{"atom":55}},{"Repetition":{"atom":110,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":111}},{"Sequence":{"atoms":[109,112]}},{"Repetition":{"atom":113,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":52}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":55}},{"Repetition":{"atom":117,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":118}},{"Sequence":{"atoms":[89,90,91,92,100,104,105,108,114,115,116,119]}},{"Alternative":{"atoms":[86,120]}},{"Entity":{"atom":18}},{"Entity":{"atom":49}},{"Alternative":{"atoms":[122,123]}},{"Entity":{"atom":52}},{"Entity":{"atom":211}},{"Entity":{"atom":131}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[128,129,130]}},{"Entity":{"atom":194}},{"Entity":{"atom":149}},{"Entity":{"atom":102}},{"Named":{"name":"amd_sep_plus","atom":134}},{"Entity":{"atom":34}},{"Named":{"name":"amd_sep_slash","atom":136}},{"Alternative":{"atoms":[135,137]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":55}},{"Repetition":{"atom":140,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":141}},{"Entity":{"atom":95}},{"Entity":{"atom":55}},{"Repetition":{"atom":144,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":145}},{"Sequence":{"atoms":[143,146]}},{"Repetition":{"atom":147,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[138,139,142,148]}},{"Entity":{"atom":192}},{"Entity":{"atom":102}},{"Named":{"name":"amd_sep_plus","atom":151}},{"Entity":{"atom":34}},{"Named":{"name":"amd_sep_slash","atom":153}},{"Alternative":{"atoms":[152,154]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":55}},{"Entity":{"atom":55}},{"Repetition":{"atom":158,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[157,159]}},{"Named":{"name":"cor_number","atom":160}},{"Repetition":{"atom":161,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":184}},{"Entity":{"atom":95}},{"Entity":{"atom":55}},{"Repetition":{"atom":165,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":166}},{"Entity":{"atom":67}},{"Entity":{"atom":183}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[170,171,172,173,174,175,176,177,178,179,180,181]}},{"Named":{"name":"month","atom":182}},{"Sequence":{"atoms":[164,167,168,169]}},{"Entity":{"atom":95}},{"Entity":{"atom":55}},{"Repetition":{"atom":186,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":187}},{"Sequence":{"atoms":[185,188]}},{"Alternative":{"atoms":[163,189]}},{"Repetition":{"atom":190,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[155,156,162,191]}},{"Alternative":{"atoms":[133,150]}},{"Named":{"name":"supplement","atom":193}},{"Lookahead":{"atom":132,"positive":false}},{"Entity":{"atom":202}},{"Entity":{"atom":52}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":55}},{"Repetition":{"atom":199,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":200}},{"Sequence":{"atoms":[197,198,201]}},{"Lookahead":{"atom":196,"positive":false}},{"Entity":{"atom":207}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[205,206]}},{"Sequence":{"atoms":[195,203,204]}},{"Repetition":{"atom":208,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[127,209]}},{"Named":{"name":"adopted_string","atom":210}},{"Sequence":{"atoms":[125,126]}},{"Repetition":{"atom":212,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":52}},{"Entity":{"atom":221}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[216,217,218,219]}},{"Named":{"name":"type","atom":220}},{"Sequence":{"atoms":[214,215]}},{"Entity":{"atom":34}},{"Entity":{"atom":221}},{"Sequence":{"atoms":[223,224]}},{"Alternative":{"atoms":[222,225]}},{"Repetition":{"atom":226,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":52}},{"Entity":{"atom":63}},{"Entity":{"atom":75}},{"Entity":{"atom":243}},{"Entity":{"atom":52}},{"Str":{"pattern":"V"}},{"Entity":{"atom":55}},{"Repetition":{"atom":234,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":55}},{"Repetition":{"atom":237,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":55}},{"Repetition":{"atom":240,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[232,233,235,236,238,239,241]}},{"Named":{"name":"version","atom":242}},{"Repetition":{"atom":231,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":99}},{"Repetition":{"atom":245,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[228,229,230,244,246]}},{"Repetition":{"atom":247,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":252}},{"Entity":{"atom":194}},{"Repetition":{"atom":250,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":251}},{"Entity":{"atom":202}},{"Repetition":{"atom":253,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[124,213,227,248,249,254]}},{"Alternative":{"atoms":[13,255]}},{"Named":{"name":"adopted","atom":12}},{"Entity":{"atom":282}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Alternative":{"atoms":[259,260]}},{"Named":{"name":"intl_org","atom":261}},{"Entity":{"atom":9}},{"Entity":{"atom":265}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":264,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":266}},{"Sequence":{"atoms":[262,263,267]}},{"Entity":{"atom":7}},{"Entity":{"atom":265}},{"Repetition":{"atom":270,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":271}},{"Sequence":{"atoms":[269,272]}},{"Repetition":{"atom":273,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":276}},{"Str":{"pattern":":"}},{"Entity":{"atom":265}},{"Repetition":{"atom":277,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":278}},{"Sequence":{"atoms":[275,279]}},{"Repetition":{"atom":280,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[268,274,281]}},{"Named":{"name":"intl","atom":258}},{"Entity":{"atom":301}},{"Str":{"pattern":"TS"}},{"Str":{"pattern":"TR"}},{"Alternative":{"atoms":[285,286]}},{"Named":{"name":"evs_type","atom":287}},{"Entity":{"atom":9}},{"Sequence":{"atoms":[288,289]}},{"Repetition":{"atom":290,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":265}},{"Repetition":{"atom":292,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":293}},{"Entity":{"atom":276}},{"Entity":{"atom":265}},{"Repetition":{"atom":296,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":297}},{"Sequence":{"atoms":[295,298]}},{"Repetition":{"atom":299,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[291,294,300]}},{"Named":{"name":"plain","atom":284}},{"Alternative":{"atoms":[257,283,302]}},{"Entity":{"atom":327}},{"Entity":{"atom":306}},{"Str":{"pattern":"+"}},{"Named":{"name":"supp_plus","atom":305}},{"Entity":{"atom":309}},{"Str":{"pattern":"/"}},{"Named":{"name":"supp_slash","atom":308}},{"Entity":{"atom":9}},{"Named":{"name":"supp_space","atom":311}},{"Alternative":{"atoms":[307,310,312]}},{"Str":{"pattern":"AMD"}},{"Named":{"name":"amd_kind","atom":314}},{"Sequence":{"atoms":[313,315]}},{"Entity":{"atom":265}},{"Repetition":{"atom":317,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":318}},{"Entity":{"atom":276}},{"Entity":{"atom":265}},{"Repetition":{"atom":321,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":322}},{"Sequence":{"atoms":[320,323]}},{"Repetition":{"atom":324,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[316,319,325]}},{"Named":{"name":"evs_amd","atom":326}},{"Repetition":{"atom":304,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":349}},{"Entity":{"atom":306}},{"Named":{"name":"supp_plus","atom":330}},{"Entity":{"atom":309}},{"Named":{"name":"supp_slash","atom":332}},{"Alternative":{"atoms":[331,333]}},{"Str":{"pattern":"COR"}},{"Named":{"name":"cor_kind","atom":335}},{"Sequence":{"atoms":[334,336]}},{"Entity":{"atom":265}},{"Repetition":{"atom":338,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cor_number","atom":339}},{"Repetition":{"atom":340,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":276}},{"Entity":{"atom":265}},{"Repetition":{"atom":343,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"cor_year","atom":344}},{"Sequence":{"atoms":[342,345]}},{"Repetition":{"atom":346,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[337,341,347]}},{"Named":{"name":"evs_cor","atom":348}},{"Entity":{"atom":366}},{"Entity":{"atom":9}},{"Named":{"name":"supp_space","atom":351}},{"Str":{"pattern":"AC"}},{"Named":{"name":"cor_kind","atom":353}},{"Entity":{"atom":265}},{"Repetition":{"atom":355,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cor_number","atom":356}},{"Repetition":{"atom":357,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":276}},{"Entity":{"atom":265}},{"Repetition":{"atom":360,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"cor_year","atom":361}},{"Sequence":{"atoms":[359,362]}},{"Repetition":{"atom":363,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[352,354,358,364]}},{"Named":{"name":"evs_cor","atom":365}},{"Alternative":{"atoms":[329,350]}},{"Repetition":{"atom":367,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":384}},{"Entity":{"atom":306}},{"Named":{"name":"supp_plus","atom":370}},{"Entity":{"atom":309}},{"Named":{"name":"supp_slash","atom":372}},{"Alternative":{"atoms":[371,373]}},{"Str":{"pattern":"NA"}},{"Sequence":{"atoms":[374,375]}},{"Entity":{"atom":276}},{"Entity":{"atom":265}},{"Repetition":{"atom":378,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"na_year","atom":379}},{"Sequence":{"atoms":[377,380]}},{"Repetition":{"atom":381,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[376,382]}},{"Named":{"name":"na","atom":383}},{"Repetition":{"atom":369,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,4,5,303,328,368,385]}}],"root":386},"bindings":[]},"cen_cenelec.identifier":{"root":"cen_cenelec.identifier","grammar":{"atoms":[{"Entity":{"atom":108}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":36}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":28}},{"Entity":{"atom":26}},{"Entity":{"atom":21}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Str":{"pattern":"ETSI"}},{"Alternative":{"atoms":[22,23]}},{"Named":{"name":"copublisher","atom":24}},{"Sequence":{"atoms":[20,25]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"copublishers","atom":27}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,29]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":31}},{"Entity":{"atom":28}},{"Repetition":{"atom":33,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,34]}},{"Alternative":{"atoms":[13,30,35]}},{"Alternative":{"atoms":[1,6]}},{"Entity":{"atom":39}},{"Str":{"pattern":" "}},{"Entity":{"atom":50}},{"Entity":{"atom":42}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":41,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":39}},{"Entity":{"atom":42}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[44,46]}},{"Repetition":{"atom":47,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[43,48]}},{"Named":{"name":"number","atom":49}},{"Entity":{"atom":62}},{"Entity":{"atom":60}},{"Entity":{"atom":54}},{"Str":{"pattern":"-"}},{"Entity":{"atom":42}},{"Entity":{"atom":54}},{"Alternative":{"atoms":[55,56]}},{"Repetition":{"atom":57,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":58}},{"Sequence":{"atoms":[53,59]}},{"Repetition":{"atom":52,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":61}},{"Entity":{"atom":39}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":42}},{"Repetition":{"atom":65,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":66}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":71}},{"Sequence":{"atoms":[37,38,40,51,63,64,67,68,69,72]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[74,75]}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":86}},{"Entity":{"atom":82}},{"Str":{"pattern":":"}},{"Entity":{"atom":42}},{"Repetition":{"atom":83,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":84}},{"Sequence":{"atoms":[81,85]}},{"Repetition":{"atom":80,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":89}},{"Str":{"pattern":"+"}},{"Entity":{"atom":21}},{"Alternative":{"atoms":[88,90]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":93,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":94}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":98}},{"Sequence":{"atoms":[96,99]}},{"Repetition":{"atom":100,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":105}},{"Sequence":{"atoms":[76,77,78,79,87,91,92,95,101,102,103,106]}},{"Alternative":{"atoms":[73,107]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[109,110]}},{"Entity":{"atom":39}},{"Entity":{"atom":198}},{"Entity":{"atom":118}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[115,116,117]}},{"Entity":{"atom":181}},{"Entity":{"atom":136}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":121}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":123}},{"Alternative":{"atoms":[122,124]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":127,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":128}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":131,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":132}},{"Sequence":{"atoms":[130,133]}},{"Repetition":{"atom":134,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[125,126,129,135]}},{"Entity":{"atom":179}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":138}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":140}},{"Alternative":{"atoms":[139,141]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":42}},{"Entity":{"atom":42}},{"Repetition":{"atom":145,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[144,146]}},{"Named":{"name":"cor_number","atom":147}},{"Repetition":{"atom":148,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":171}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":152,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":153}},{"Entity":{"atom":54}},{"Entity":{"atom":170}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[157,158,159,160,161,162,163,164,165,166,167,168]}},{"Named":{"name":"month","atom":169}},{"Sequence":{"atoms":[151,154,155,156]}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Sequence":{"atoms":[172,175]}},{"Alternative":{"atoms":[150,176]}},{"Repetition":{"atom":177,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[142,143,149,178]}},{"Alternative":{"atoms":[120,137]}},{"Named":{"name":"supplement","atom":180}},{"Lookahead":{"atom":119,"positive":false}},{"Entity":{"atom":189}},{"Entity":{"atom":39}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":42}},{"Repetition":{"atom":186,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[184,185,188]}},{"Lookahead":{"atom":183,"positive":false}},{"Entity":{"atom":194}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[192,193]}},{"Sequence":{"atoms":[182,190,191]}},{"Repetition":{"atom":195,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[114,196]}},{"Named":{"name":"adopted_string","atom":197}},{"Sequence":{"atoms":[112,113]}},{"Repetition":{"atom":199,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":208}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[203,204,205,206]}},{"Named":{"name":"type","atom":207}},{"Sequence":{"atoms":[201,202]}},{"Entity":{"atom":21}},{"Entity":{"atom":208}},{"Sequence":{"atoms":[210,211]}},{"Alternative":{"atoms":[209,212]}},{"Repetition":{"atom":213,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":230}},{"Entity":{"atom":39}},{"Str":{"pattern":"V"}},{"Entity":{"atom":42}},{"Repetition":{"atom":221,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":224,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":227,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[219,220,222,223,225,226,228]}},{"Named":{"name":"version","atom":229}},{"Repetition":{"atom":218,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":86}},{"Repetition":{"atom":232,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[215,216,217,231,233]}},{"Repetition":{"atom":234,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":239}},{"Entity":{"atom":181}},{"Repetition":{"atom":237,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":238}},{"Entity":{"atom":189}},{"Repetition":{"atom":240,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[111,200,214,235,236,241]}},{"Alternative":{"atoms":[0,242]}}],"root":243},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule cen_cenelec.publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.publisher: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.adopted_org_prefix: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.any_noln_char: branches 1 and 2 are order-dependent (first set not statically known)","rule cen_cenelec.fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cen_cenelec.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":"EVS-EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN ISO 9001:2015/A1:2024","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS EN 196-1:2016","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS 921:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-TS 1:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-TR 1:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-ISO 9001:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-IEC 62368-1:2020","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN 1993-1-1:2005+NA:2010","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN 1993-1-1:2005/NA","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN 50581:2012+COR:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN 50581:2012+AC:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"EVS-EN 71-1:2011 AMD1:2014","expect":{}},{"entry":"identifier","kind":"accept","input":"prEVS-EN 100:2026","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 18216:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"CEN/CLC/ETSI/TR 101551:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 302 326-2:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 302 326-2 V2.2.1","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 302 326 V2.2.1:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"accept","input":"EN 302:2026","expect":{}},{"entry":"cen_cenelec.identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# The EVS national identifier: the national prefix (\"EVS\" / \"prEVS\") over a\n# CEN/CENELEC adoption, an ISO/IEC adoption, or a plain Estonian standard —\n# plus the EVS-list supplements (national annex, corrigendum, AMD amendment)\n# and the language code. The CEN spine is IMPORTED via `use` (TODO 11/C6\n# imports): rules are namespaced cen_cenelec.* while captures keep their\n# contract names.\n\nuse cen_cenelec\n\ngrammar PubidEvs version \"0.3.0\" {\n identifier = [draft_prefix] \"EVS\" evs_separator ((cen_cenelec.identifier) as adopted / (evs_intl) as intl / (evs_plain) as plain) [evs_amd] [evs_cor / evs_ac] [evs_na]\n\n draft_prefix = \"pr\" as draft_prefix\n evs_separator = (dash / space) as evs_separator\n\n # \"EVS-ISO 9001:2015\", \"EVS-IEC 62368-1:2020\" (+ their amendments)\n evs_intl = ((((\"ISO\" / \"IEC\") as intl_org) space (1*digit) as number) [(dash (1*digit) as part)] [(colon (4digit) as year)])\n # \"EVS 921:2019\", \"EVS-TS 1:2019\", \"EVS-TR 1:2019\"\n evs_plain = [((\"TS\" / \"TR\") as evs_type) space] (1*digit) as number [(colon (4digit) as year)]\n\n # \" AMD1:2014\" / \"+AMD1\" — the AMD amendment spelling; the separator is\n # semantic (list: \"+A full standard plus the amendment\", \"/A only amendment\")\n evs_amd = (((plus as supp_plus / slash as supp_slash / space as supp_space) (\"AMD\" as amd_kind)) (1*digit) as amd_number [(colon (4digit) as amd_year)]) as evs_amd\n # \"+COR:2015\" / \"/COR\" — the COR spelling (the CEN spine consumes +AC itself)\n evs_cor = (((plus as supp_plus / slash as supp_slash) (\"COR\" as cor_kind)) [(1*digit) as cor_number] [(colon (4digit) as cor_year)]) as evs_cor\n # \" AC:2015\" — the space-separated AC spelling\n evs_ac = ((space as supp_space) (\"AC\" as cor_kind) [(1*digit) as cor_number] [(colon (4digit) as cor_year)]) as evs_cor\n # \"+NA:2010\" / \"/NA\" — the national annex\n evs_na = (((plus as supp_plus / slash as supp_slash) \"NA\") [(colon (4digit) as na_year)]) as na\n # The trailing language code (\" et\" / \" en\" / \" et-en\") is extracted by\n # the parse wrapper (Pubid::Evs.parse) BEFORE the grammar runs — the\n # CEN adopted_string is greedy over plain text and would swallow it.\n\n digit = %x30-39\n dash = \"-\"\n space = \" \"\n plus = \"+\"\n slash = \"/\"\n colon = \":\"\n\n entry identifier: identifier\n\n test {\n accept \"EVS-EN 18216:2026\"\n accept \"EVS-EN ISO 9001:2015/A1:2024\"\n accept \"EVS EN 196-1:2016\"\n accept \"EVS 921:2019\"\n accept \"EVS-TS 1:2019\"\n accept \"EVS-TR 1:2019\"\n accept \"EVS-ISO 9001:2015\"\n accept \"EVS-IEC 62368-1:2020\"\n accept \"EVS-EN 1993-1-1:2005+NA:2010\"\n accept \"EVS-EN 1993-1-1:2005/NA\"\n accept \"EVS-EN 50581:2012+COR:2015\"\n accept \"EVS-EN 50581:2012+AC:2015\"\n accept \"EVS-EN 71-1:2011 AMD1:2014\"\n accept \"prEVS-EN 100:2026\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:ce15308f43d1d9dfcd5f5245ce92c1d03cd2c8d0c88a0942f82be9f78f7a3e9b"}