You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
>> uvx abnf-to-regexp -i rfc6350-modified.abnf
Traceback (most recent call last):
File "/Users/***/.cache/uv/archive-v0/***/bin/abnf-to-regexp", line 12, in<module>sys.exit(main())
~~~~^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/main.py", line 153, in main
return run(
params=params,
stdout=sys.stdout,
stderr=sys.stderr,
)
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/main.py", line 104, in run
regexp = abnf_to_regexp.single_regexp.translate(rule_cls=OurRule)
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/icontract/_checkers.py", line 834, in wrapper
result = func(*args, **kwargs)
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/single_regexp.py", line 67, in translate
regexp = abnf_to_regexp.compression.compress(regexp)
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/compression.py", line 105, in compress
element = _MergeAlternationsOfCharacterClasses().transform(element)
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 109, in transform
return self.transform_repetition(element)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 135, in transform_repetition
element=self.transform(element.element),
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 105, in transform
return self.transform_concatenation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 125, in transform_concatenation
elements=[self.transform(subelement) forsubelementin element.elements]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 109, in transform
return self.transform_repetition(element)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 135, in transform_repetition
element=self.transform(element.element),
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 105, in transform
return self.transform_concatenation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 125, in transform_concatenation
elements=[self.transform(subelement) forsubelementin element.elements]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 109, in transform
return self.transform_repetition(element)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 135, in transform_repetition
element=self.transform(element.element),
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 105, in transform
return self.transform_concatenation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 125, in transform_concatenation
elements=[self.transform(subelement) forsubelementin element.elements]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 107, in transform
return self.transform_alternation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/compression.py", line 41, in transform_alternation
self.transform(subelement) forsubelementin element.elements
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 105, in transform
return self.transform_concatenation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 125, in transform_concatenation
elements=[self.transform(subelement) forsubelementin element.elements]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 105, in transform
return self.transform_concatenation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 125, in transform_concatenation
elements=[self.transform(subelement) forsubelementin element.elements]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/base.py", line 107, in transform
return self.transform_alternation(element)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/***/.cache/uv/archive-v0/***/lib/python3.14/site-packages/abnf_to_regexp/compression.py", line 63, in transform_alternation
assert len(subelement.value) == 1
^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
ABNF Rules List for RFC6350
vcard-entity=1*vcardvcard="BEGIN:VCARD"CRLF"VERSION:4.0"CRLF1*contentline"END:VCARD"CRLFcontentline= [group"."] name*(";"param) ":"valueCRLFgroup=1*(ALPHA/DIGIT/"-")
name="SOURCE"/"KIND"/"FN"/"N"/"NICKNAME"/"PHOTO"/"BDAY"/"ANNIVERSARY"/"GENDER"/"ADR"/"TEL"/"EMAIL"/"IMPP"/"LANG"/"TZ"/"GEO"/"TITLE"/"ROLE"/"LOGO"/"ORG"/"MEMBER"/"RELATED"/"CATEGORIES"/"NOTE"/"PRODID"/"REV"/"SOUND"/"UID"/"CLIENTPIDMAP"/"URL"/"KEY"/"FBURL"/"CALADRURI"/"CALURI"/"XML"/iana-token/x-nameiana-token=1*(ALPHA/DIGIT/"-")
x-name="x-"1*(ALPHA/DIGIT/"-")
param=language-param/value-param/pref-param/pid-param/type-param/geo-parameter/tz-parameter/sort-as-param/calscale-param/any-paramparam-value=*SAFE-CHAR/DQUOTE*QSAFE-CHARDQUOTEany-param= (iana-token/x-name) "="param-value*(","param-value)
UTF8-tail= %x80-BFUTF8-1= %x00-7FUTF8-2= %xC2-DFUTF8-tailUTF8-3= %xE0 %xA0-BFUTF8-tail/ %xE1-EC 2( UTF8-tail ) /
%xED %x80-9FUTF8-tail/ %xEE-EF 2( UTF8-tail )
UTF8-4= %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
%xF4 %x80-8F 2( UTF8-tail )
UTF8-char=UTF8-1/UTF8-2/UTF8-3/UTF8-4UTF8-octets=*( UTF8-char )
NON-ASCII=UTF8-2/UTF8-3/UTF8-4CRLF= %d13.10ALPHA= %x41-5A/ %x61-7A; A-Z / a-zDIGIT= %x30-39; 0-9DQUOTE= %x22; " (Double Quote)HTAB= %x09; horizontal tabSP= %x20WSP=SP/HTABVCHAR= %x21-7EQSAFE-CHAR=WSP/"!"/ %x23-7E/NON-ASCIISAFE-CHAR=WSP/"!"/ %x23-39/ %x3C-7E/NON-ASCIIVALUE-CHAR=WSP/VCHAR/NON-ASCIIvalue=text/text-list/date-list/time-list/date-time-list/date-and-or-time-list/timestamp-list/boolean/integer-list/float-list/URI; from Section 3 of [RFC3986]/utc-offset/Language-Tagtext=*TEXT-CHARTEXT-CHAR="\\"/"\,"/"\n"/WSP/NON-ASCII/ %x21-2B/ %x2D-5B/ %x5D-7Ecomponent="\\"/"\,"/"\;"/"\n"/WSP/NON-ASCII/ %x21-2B/ %x2D-3A/ %x3C-5B/ %x5D-7Elist-component=component*(","component)
text-list=text*(","text)
date-list=date*(","date)
time-list=time*(","time)
date-time-list=date-time*(","date-time)
date-and-or-time-list=date-and-or-time*(","date-and-or-time)
timestamp-list=timestamp*(","timestamp)
integer-list=integer*(","integer)
float-list=float*(","float)
boolean="TRUE"/"FALSE"integer= [sign] 1*DIGITfloat= [sign] 1*DIGIT ["."1*DIGIT]
sign="+"/"-"year= 4DIGIT; 0000-9999month= 2DIGIT; 01-12day= 2DIGIT; 01-28/29/30/31 depending on month and leap yearhour= 2DIGIT; 00-23minute= 2DIGIT; 00-59second= 2DIGIT; 00-58/59/60 depending on leap secondzone=utc-designator/utc-offsetutc-designator= %x5A; uppercase "Z"date=year [monthday]
/year"-"month/"--"month [day]
/"--""-"daydate-noreduc=yearmonthday/"--"monthday/"--""-"daydate-complete=yearmonthdaytime=hour [minute [second]] [zone]
/"-"minute [second] [zone]
/"-""-"second [zone]
time-notrunc=hour [minute [second]] [zone]
time-complete=hourminutesecond [zone]
time-designator= %x54; uppercase "T"date-time=date-noreductime-designatortime-notrunctimestamp=date-completetime-designatortime-completedate-and-or-time=date-time/date/time-designatortimeutc-offset=signhour [minute]
Language-Tag=langtag; normal language tags/privateuse; private use tag/grandfathered; grandfathered tagslangtag=language
["-"script]
["-"region]
*("-"variant)
*("-"extension)
["-"privateuse]
language=2*3ALPHA; shortest ISO 639 code
["-"extlang] ; sometimes followed by/ 4ALPHA; or reserved for future use/5*8ALPHA; or registered language subtagextlang= 3ALPHA; selected ISO 639 codes*2("-" 3ALPHA) ; permanently reservedscript= 4ALPHA; ISO 15924 coderegion= 2ALPHA; ISO 3166-1 code/ 3DIGIT; UN M.49 codevariant=5*8alphanum; registered variants/ (DIGIT 3alphanum)
extension=singleton1*("-" (2*8alphanum))
singleton=DIGIT; 0 - 9/ %x41-57; A - W/ %x59-5A; Y - Z/ %x61-77; a - w/ %x79-7A; y - zprivateuse="x"1*("-" (1*8alphanum))
grandfathered=irregular; non-redundant tags registered/regular; during the RFC 3066 erairregular="en-GB-oed"; irregular tags do not match/"i-ami"; the 'langtag' production and/"i-bnn"; would not otherwise be/"i-default"; considered 'well-formed'/"i-enochian"; These tags are all valid,/"i-hak"; but most are deprecated/"i-klingon"; in favor of more modern/"i-lux"; subtags or subtag/"i-mingo"; combination/"i-navajo"/"i-pwn"/"i-tao"/"i-tay"/"i-tsu"/"sgn-BE-FR"/"sgn-BE-NL"/"sgn-CH-DE"regular="art-lojban"; these tags match the 'langtag'/"cel-gaulish"; production, but their subtags/"no-bok"; are not extended language/"no-nyn"; or variant subtags: their meaning/"zh-guoyu"; is defined by their registration/"zh-hakka"; and all of these are deprecated/"zh-min"; in favor of a more modern/"zh-min-nan"; subtag or sequence of subtags/"zh-xiang"obs-language-tag=primary-subtag*( "-"subtag )
primary-subtag=1*8ALPHAsubtag=1*8(ALPHA/DIGIT)
language-param="LANGUAGE="Language-Tagalphanum= (ALPHA/DIGIT) ; letters and numbersvalue-param="VALUE="value-typevalue-type="text"/"uri"/"date"/"time"/"date-time"/"date-and-or-time"/"timestamp"/"boolean"/"integer"/"float"/"utc-offset"/"language-tag"/iana-token; registered as described in section 12/x-namepref-param="PREF=" (1*2DIGIT/"100")
altid-param="ALTID="param-valuepid-param="PID="pid-value*(","pid-value)
pid-value=1*DIGIT ["."1*DIGIT]
type-param="TYPE="type-value*(","type-value)
type-value="work"/"home"/type-param-tel/type-param-related/iana-token/x-namemediatype-param="MEDIATYPE="mediatypemediatype=type-name"/"subtype-name*( ";"attribute"="value )
attribute=1*ALPHA/DIGIT/"-"token=attributecalscale-param="CALSCALE="calscale-valuecalscale-value="gregorian"/iana-token/x-namesort-as-param="SORT-AS="sort-as-valuesort-as-value=param-value*(","param-value)
geo-parameter="GEO="DQUOTEURIDQUOTEtz-parameter="TZ=" (param-value/DQUOTEURIDQUOTE)
BEGIN-param=""; no parameter allowedBEGIN-value="VCARD"END-param=""; no parameter allowedEND-value="VCARD"SOURCE-param="VALUE=uri"/pid-param/pref-param/altid-param/mediatype-param/any-paramSOURCE-value=URIKIND-param="VALUE=text"/any-paramKIND-value="individual"/"group"/"org"/"location"/iana-token/x-nameXML-param="VALUE=text"/altid-paramXML-value=textFN-param="VALUE=text"/type-param/language-param/altid-param/pid-param/pref-param/any-paramFN-value=textN-param="VALUE=text"/sort-as-param/language-param/altid-param/any-paramN-value=list-component 4(";"list-component)
NICKNAME-param="VALUE=text"/type-param/language-param/altid-param/pid-param/pref-param/any-paramNICKNAME-value=text-listPHOTO-param="VALUE=uri"/altid-param/type-param/mediatype-param/pref-param/pid-param/any-paramPHOTO-value=URIBDAY-param=BDAY-param-date/BDAY-param-textBDAY-value=date-and-or-time/textBDAY-param-date="VALUE=date-and-or-time"BDAY-param-text="VALUE=text"/language-paramBDAY-param=/altid-param/calscale-param/any-paramANNIVERSARY-param="VALUE=" ("date-and-or-time"/"text")
ANNIVERSARY-value=date-and-or-time/textANNIVERSARY-param=/altid-param/calscale-param/any-paramGENDER-param="VALUE=text"/any-paramGENDER-value=sex [";"text]
sex=""/"M"/"F"/"O"/"N"/"U"label-param="LABEL="param-valueADR-param="VALUE=text"/label-param/language-param/geo-parameter/tz-parameter/altid-param/pid-param/pref-param/type-param/any-paramADR-value=ADR-component-pobox";"ADR-component-ext";"ADR-component-street";"ADR-component-locality";"ADR-component-region";"ADR-component-code";"ADR-component-countryADR-component-pobox=list-componentADR-component-ext=list-componentADR-component-street=list-componentADR-component-locality=list-componentADR-component-region=list-componentADR-component-code=list-componentADR-component-country=list-componentTEL-TYPE="voice,fax"TEL-param=TEL-text-param/TEL-uri-paramTEL-value=TEL-text-value/TEL-uri-valueTEL-text-param="VALUE=text"TEL-text-value=textTEL-uri-param="VALUE=uri"/mediatype-paramTEL-uri-value=URITEL-param=/type-param/pid-param/pref-param/altid-param/any-paramtype-param-tel="text"/"voice"/"fax"/"cell"/"video"/"pager"/"textphone"/iana-token/x-nameEMAIL-param="VALUE=text"/pid-param/pref-param/type-param/altid-param/any-paramEMAIL-value=textIMPP-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramIMPP-value=URILANG-param="VALUE=language-tag"/pid-param/pref-param/altid-param/type-param/any-paramLANG-value=Language-TagTZ-param="VALUE=" ("text"/"uri"/"utc-offset")
TZ-value=text/URI/utc-offsetTZ-param=/altid-param/pid-param/pref-param/type-param/mediatype-param/any-paramGEO-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramGEO-value=URITITLE-param="VALUE=text"/language-param/pid-param/pref-param/altid-param/type-param/any-paramTITLE-value=textROLE-param="VALUE=text"/language-param/pid-param/pref-param/type-param/altid-param/any-paramROLE-value=textLOGO-param="VALUE=uri"/language-param/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramLOGO-value=URIORG-param="VALUE=text"/sort-as-param/language-param/pid-param/pref-param/altid-param/type-param/any-paramORG-value=component*(";"component)
MEMBER-param="VALUE=uri"/pid-param/pref-param/altid-param/mediatype-param/any-paramMEMBER-value=URIRELATED-param=RELATED-param-uri/RELATED-param-textRELATED-value=URI/textRELATED-param-uri="VALUE=uri"/mediatype-paramRELATED-param-text="VALUE=text"/language-paramRELATED-param=/pid-param/pref-param/altid-param/type-param/any-paramtype-param-related=related-type-value*(","related-type-value)
related-type-value="contact"/"acquaintance"/"friend"/"met"/"co-worker"/"colleague"/"co-resident"/"neighbor"/"child"/"parent"/"sibling"/"spouse"/"kin"/"muse"/"crush"/"date"/"sweetheart"/"me"/"agent"/"emergency"CATEGORIES-param="VALUE=text"/pid-param/pref-param/type-param/altid-param/any-paramCATEGORIES-value=text-listNOTE-param="VALUE=text"/language-param/pid-param/pref-param/type-param/altid-param/any-paramNOTE-value=textPRODID-param="VALUE=text"/any-paramPRODID-value=textREV-param="VALUE=timestamp"/any-paramREV-value=timestampSOUND-param="VALUE=uri"/language-param/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramSOUND-value=URIUID-param=UID-uri-param/UID-text-paramUID-value=UID-uri-value/UID-text-valueUID-uri-param="VALUE=uri"UID-uri-value=URIUID-text-param="VALUE=text"UID-text-value=textUID-param=/any-paramCLIENTPIDMAP-param=any-paramCLIENTPIDMAP-value=1*DIGIT";"URIURL-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramURL-value=URIVERSION-param="VALUE=text"/any-paramVERSION-value="4.0"KEY-param=KEY-uri-param/KEY-text-paramKEY-value=KEY-uri-value/KEY-text-valueKEY-uri-param="VALUE=uri"/mediatype-paramKEY-uri-value=URIKEY-text-param="VALUE=text"KEY-text-value=textKEY-param=/altid-param/pid-param/pref-param/type-param/any-paramFBURL-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramFBURL-value=URICALADRURI-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramCALADRURI-value=URICALURI-param="VALUE=uri"/pid-param/pref-param/type-param/mediatype-param/altid-param/any-paramCALURI-value=URIHEXDIG=DIGIT/"A"/"B"/"C"/"D"/"E"/"F"reserved=gen-delims/sub-delimsgen-delims=":"/"/"/"?"/"#"/"["/"]"/"@"sub-delims="!"/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"="unreserved=ALPHA/DIGIT/"-"/"."/"_"/"~"URI=scheme":"hier-part [ "?"query ] [ "#"fragment ]
hier-part="//"authoritypath-abempty/path-absolute/path-rootless/path-emptyscheme=ALPHA*( ALPHA/DIGIT/"+"/"-"/"." )
authority= [ userinfo"@" ] host [ ":"port ]
userinfo=*( unreserved/pct-encoded/sub-delims/":" )
host=IP-literal/IPv4address/reg-nameIP-literal="[" ( IPv6address/IPvFuture ) "]"IPvFuture="v"1*HEXDIG"."1*( unreserved/sub-delims/":" )
IPv6address= 6( h16":" ) ls32/"::" 5( h16":" ) ls32/ [ h16 ] "::" 4( h16":" ) ls32/ [ *1( h16":" ) h16 ] "::" 3( h16":" ) ls32/ [ *2( h16":" ) h16 ] "::" 2( h16":" ) ls32/ [ *3( h16":" ) h16 ] "::"h16":"ls32/ [ *4( h16":" ) h16 ] "::"ls32/ [ *5( h16":" ) h16 ] "::"h16/ [ *6( h16":" ) h16 ] "::"ls32= ( h16":"h16 ) /IPv4addressh16=1*4HEXDIGIPv4address=dec-octet"."dec-octet"."dec-octet"."dec-octetdec-octet=DIGIT; 0-9/ %x31-39DIGIT; 10-99/"1" 2DIGIT; 100-199/"2" %x30-34DIGIT; 200-249/"25" %x30-35; 250-255reg-name=*( unreserved/pct-encoded/sub-delims )
port=*DIGITpath=path-abempty; begins with "/" or is empty/path-absolute; begins with "/" but not "//"/path-noscheme; begins with a non-colon segment/path-rootless; begins with a segment/path-empty; zero characterspath-abempty=*( "/"segment )
path-absolute="/" [ segment-nz*( "/"segment ) ]
path-noscheme=segment-nz-nc*( "/"segment )
path-rootless=segment-nz*( "/"segment )
path-empty=""segment=*pcharsegment-nz=1*pcharsegment-nz-nc=1*( unreserved/pct-encoded/sub-delims/"@" )
pchar=unreserved/pct-encoded/sub-delims/":"/"@"query=*( pchar/"/"/"?" )
fragment=*( pchar/"/"/"?" )
URI-reference=URI/relative-refrelative-ref=relative-part [ "?"query ] [ "#"fragment ]
relative-part="//"authoritypath-abempty/path-absolute/path-noscheme/path-emptyabsolute-URI=scheme":"hier-part [ "?"query ]
result=""type-name=reg-namesubtype-name=reg-nameparameter-name=reg-namepct-encoded="%"HEXDIGHEXDIG