Ë
    :vžjå  ã                   óÎ   — d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ  G d	„ d
«      Zee   Z G d„ d«      Zd„ Zd„ Z G d„ d«      Zy)z*Provides for superficial grammar analysis.é    )ÚCounterÚdefaultdict)ÚListÚDictÚIteratorÚ	FrozenSetÚSeté   )ÚbfsÚfzsetÚclassifyÚ
OrderedSet)ÚGrammarError)ÚRuleÚTerminalÚNonTerminalÚSymbol)Ú
ParserConfc                   ó�   — e Zd ZU dZeed<   eed<   dedefd„Zd„ Ze	de
fd„«       Zde
dd fd	„Ze	defd
„«       Zdefd„Zdefd„Zy)ÚRulePtr)ÚruleÚindexr   r   c                 óx   — t        |t        «      sJ ‚|t        |j                  «      k  sJ ‚|| _        || _        y ©N)Ú
isinstancer   ÚlenÚ	expansionr   r   )Úselfr   r   s      ún/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/lark/parsers/grammar_analysis.pyÚ__init__zRulePtr.__init__   s7   € Ü˜$¤Ô%Ð%Ð%Øœ˜DŸN™NÓ+Ò+Ð+Ð+ØˆŒ	Øˆ�
ó    c                 óŽ  — | j                   j                  d | j                   D �cg c]  }|j                  ‘Œ }}| j                   j                  | j                  d  D �cg c]  }|j                  ‘Œ }}d| j                   j                  j                  ›ddj                  |«      ›ddj                  |«      ›d�S c c}w c c}w )NÚ<z : Ú z * Ú>)r   r   r   ÚnameÚoriginÚjoin)r   ÚxÚbeforeÚafters       r   Ú__repr__zRulePtr.__repr__   s˜   € Ø"&§)¡)×"5Ñ"5°k°t·z±zÑ"BÓCÑ"B˜Q�!—&“&Ð"BˆÐCØ!%§¡×!4Ñ!4°T·Z±Z°[Ñ!AÓBÑ!A˜A�—“Ð!AˆÑBØ#'§9¡9×#3Ñ#3×#8Ó#8¸#¿(¹(À6Õ:JÈCÏHÉHÐUZÍOÐ\Ð\ùò DùÚBs   ¦B=Á CÚreturnc                 óH   — | j                   j                  | j                     S r   )r   r   r   ©r   s    r   ÚnextzRulePtr.next   s   € à�y‰y×"Ñ" 4§:¡:Ñ.Ð.r!   Úsymc                 ój   — | j                   |k(  sJ ‚t        | j                  | j                  dz   «      S )Né   )r0   r   r   r   )r   r1   s     r   ÚadvancezRulePtr.advance    s-   € Ø�y‰y˜CÒÐÐÜ�t—y‘y $§*¡*¨Q¡,Ó/Ð/r!   c                 óZ   — | j                   t        | j                  j                  «      k(  S r   )r   r   r   r   r/   s    r   Úis_satisfiedzRulePtr.is_satisfied$   s    € à�z‰zœS §¡×!4Ñ!4Ó5Ñ5Ð5r!   c                 ó–   — t        |t        «      st        S | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r   ÚNotImplementedr   r   )r   Úothers     r   Ú__eq__zRulePtr.__eq__(   s7   € Ü˜%¤Ô)Ü!Ð!Ø�y‰y˜EŸJ™JÑ&ÒD¨4¯:©:¸¿¹Ñ+DÐDr!   c                 óD   — t        | j                  | j                  f«      S r   )Úhashr   r   r/   s    r   Ú__hash__zRulePtr.__hash__-   s   € Ü�T—Y‘Y §
¡
Ð+Ó,Ð,r!   N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   Ú__annotations__Úintr    r,   Úpropertyr   r0   r4   Úboolr6   r:   r=   © r!   r   r   r      s�   … Ø!€IØ
ƒJØƒJð˜Tð ¨#ó ò]ð
 ð/�fò /ó ð/ð0˜6ð 0 ió 0ð ð6˜dò 6ó ð6ðE˜tó Eð
-˜#ô -r!   r   c                   ó`   — e Zd ZU dZeed<   eed<   eed f   ed<   eeee	   f   ed<   d„ Z
d„ Zy)	Ú
LR0ItemSet)ÚkernelÚclosureÚtransitionsÚ
lookaheadsrI   rJ   rK   rL   c                 óz   — t        |«      | _        t        |«      | _        i | _        t	        t
        «      | _        y r   )r   rI   rJ   rK   r   ÚsetrL   )r   rI   rJ   s      r   r    zLR0ItemSet.__init__<   s,   € Ü˜F“mˆŒÜ˜W“~ˆŒØˆÔÜ%¤cÓ*ˆ�r!   c                 óè   — ddj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      ›ddj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      ›d�S c c}w c c}w )NÚ{ú, z | Ú})r(   rI   ÚreprrJ   )r   Úrs     r   r,   zLR0ItemSet.__repr__B   s\   � Ø"Ÿi™i¸$¿+º+Ó(F¹+°Q¬¨a­¸+Ñ(FÕGÈÏÉÐei×eqÒeqÓSrÑeqÐ`aÔTXÐYZÕT[ÐeqÑSrÕIsÐtÐtùÒ(FùÒSrs   ›A*
ÁA/N)r>   r?   r@   rA   ÚStaterB   r   r   r	   r   r    r,   rF   r!   r   rH   rH   4   s@   … ØB€IàƒMØƒNØ�f˜lÐ*Ñ+Ó+Ø�V˜S ™YÐ&Ñ'Ó'ò+óur!   rH   c                 ó<   — |r| |kD  ryt        | «      }| |z  } | |k7  S )NF)rN   )Úset1Úset2Úcopys      r   Ú
update_setrZ   F   s*   € Ù�4˜$’;Øäˆt‹9€DØˆD�L€DØ�4‰<Ðr!   c           	      ó&  — | D ��ch c]  }|j                   D ]  }|’Œ Œ c}}| D �ch c]  }|j                  ’Œ c}z  }t        «       }i }i }|D ]+  }|j                  r|hn	t        «       ||<   t        «       ||<   Œ- d}|r–d}| D ]Œ  }t        |j                   «      |k  rt	        ||j                  h«      rd}t        |j                   «      D ]A  \  }}t        |j                   d| «      |k  r t	        ||j                     ||   «      sŒ>d}ŒA ŒŒ ŒŽ |rŒ–d}|rèd}| D ]Þ  }t        |j                   «      D ]Ä  \  }}|t        |j                   «      dz
  k(  st        |j                   |dz   d «      |k  rt	        ||   ||j                     «      rd}t        |dz   t        |j                   «      «      D ]C  }	t        |j                   |dz   |	 «      |k  sŒ"t	        ||   ||j                   |	      «      sŒBd}ŒE ŒÆ Œà |rŒè|||fS c c}}w c c}w )zhCalculate FOLLOW sets.

    Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_setsTFNr3   )r   r'   rN   Úis_termrZ   Ú	enumerater   Úrange)
Úrulesr   r1   ÚsymbolsÚNULLABLEÚFIRSTÚFOLLOWÚchangedÚiÚjs
             r   Úcalculate_setsrg   N   s  € ñ  %Ô?™u�t°·´¨Šs°ˆs˜uÒ?Ñ[`ÓBaÑ[`ÐSWÀ4Ç;Ã;Ð[`ÑBaÑa€Gô ‹u€HØ€EØ€FÛˆØŸKšK�C‘5¬S«Uˆˆc‰
Ü“EˆˆsŠð ð
 €GÙ
ØˆãˆDÜ�4—>‘>Ó" hÒ.Ü˜h¨¯©¨Ô6Ø"�Gä# D§N¡NÖ3‘��3Ü�t—~‘~ b qÐ)Ó*¨hÒ6Ü! %¨¯©Ñ"4°e¸C±jÕAØ"&™áñ 4ð ò ð  €GÙ
ØˆãˆDÜ# D§N¡NÖ3‘��3Ø”c˜$Ÿ.™.Ó)¨!Ñ+Ò+¬s°4·>±>À!ÀAÁ#À$Ð3GÓ/HÈHÒ/TÜ! &¨¡+¨v°d·k±kÑ/BÔCØ"&˜ä˜q ™s¤C¨¯©Ó$7Ö8�AÜ˜4Ÿ>™>¨!¨A©#¨aÐ0Ó1°XÓ=Ü% f¨S¡k°5¸¿¹ÈÑ9JÑ3KÕLØ&*™Gñ 9ñ 4ð ò ð �&˜(Ð"Ð"ùóo @ùÒBas
   †H§Hc                   ó:   — e Zd Zd	dededefd„Zd
dedee   fd„Z	y)ÚGrammarAnalyzerÚparser_confÚdebugÚstrictc                 ó  — || _         || _        |j                  D �ci c]/  }|t        t	        d|z   «      t	        |«      t        d«      g«      “Œ1 }}|j                  t        |j                  «       «      z   }t        |d„ «      | _
        t        |«      t        t        |«      «      k7  rUt        |«      j                  «       D ��cg c]  \  }}|dkD  sŒ|‘Œ }	}}t        ddj!                  d„ |	D «       «      z  «      ‚|D ]<  }
|
j"                  D ]+  }|j$                  rŒ|| j                  v rŒt        d|z  «      ‚ Œ> |j                  «       D ��ci c]!  \  }}|| j'                  |j(                  «      “Œ# c}}| _        |j                  «       D ��ci c]/  \  }}|t-        t/        |t        |j"                  «      «      h«      “Œ1 c}}| _        |j                  D �ci c]%  }|t        t	        d|z   «      t	        |«      g«      “Œ' }}|j                  t        |j                  «       «      z   }t        |«      t        t        |«      «      k(  sJ ‚t        |d	„ «      | _        |j                  «       D ��ci c]A  \  }}|t5        t/        |d
«      g| j'                  |j(                  | j2                  «      «      “ŒC c}}| _        t9        |«      \  | _        | _        | _        y c c}w c c}}w c c}}w c c}}w c c}w c c}}w )Nz$root_z$ENDc                 ó   — | j                   S r   ©r'   ©rT   s    r   Ú<lambda>z*GrammarAnalyzer.__init__.<locals>.<lambda>•   s   € ÐXY×X`ÒX`r!   r3   zRules defined twice: %srQ   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Ústr)Ú.0re   s     r   Ú	<genexpr>z+GrammarAnalyzer.__init__.<locals>.<genexpr>™   s   è ø€ ÐD`ÑU_ÐPQÄSÈÇVÑU_ùs   ‚zUsing an undefined rule: %sc                 ó   — | j                   S r   ro   rp   s    r   rq   z*GrammarAnalyzer.__init__.<locals>.<lambda>¬   s   € ÀÇÂr!   r   ) rk   rl   Ústartr   r   r   r_   ÚlistÚvaluesr   Úrules_by_originr   rN   r   Úitemsr   r(   r   r\   Úexpand_ruler'   Ústart_statesr   r   Ú
end_statesÚlr0_rules_by_originrH   Úlr0_start_statesrg   rb   rc   ra   )r   rj   rk   rl   rw   Ú
root_rulesr_   ÚitemÚcountÚ
duplicatesrT   r1   Ú	root_ruleÚlr0_root_rulesÚ	lr0_ruless                  r   r    zGrammarAnalyzer.__init__�   s  € ØˆŒ
ØˆŒð $/×#4Ò#4ó6Ù#4˜%ð œT¤+¨h¸Ñ.>Ó"?Ä+ÈeÓBTÔV^Ð_eÓVfÐAgÓhÑhØ#4ð 	ð 6ð ×!Ñ!¤D¨×):Ñ):Ó)<Ó$=Ñ=ˆÜ>FÀuÑN`Ó>aˆÔäˆu‹:œœS ›Z›Ò(Ü29¸%³.×2FÑ2FÔ2HÔVÑ2H¡; 4¨ÈEÐTUËIš$Ð2HˆJÑVÜÐ8¸4¿9¹9ÑD`ÑU_ÓD`Ó;`Ñ`ÓaÐaãˆAØ—{”{�ØŸ› s¨d×.BÑ.BÒ'BÜ&Ð'DÀsÑ'JÓKÐKñ #ð ð 6@×5EÑ5EÔ5GôIÙ5GÑ!1 ¨	ð # D×$4Ñ$4°Y×5EÑ5EÓ$FÑFØ5GòIˆÔð 4>×3CÑ3CÔ3EôGÙ3EÑ/˜u ið !¤%¬°¼CÀ	×@SÑ@SÓ<TÓ)UÐ(VÓ"WÑWØ3EòGˆŒð )×.Ò.ó0Ù.�Eð  ¤¤k°(¸UÑ2BÓ&CÄkÐRWÓFXÐEYÓ!ZÑZØ.ð 	ð 0ð  ×%Ñ%¬¨^×-BÑ-BÓ-DÓ(EÑEˆ	Ü�9‹~¤¤S¨£^Ó!4Ò4Ð5Ð4ä#+¨IÑ7IÓ#JˆÔ ð )7×(<Ñ(<Ô(>ô!@Ù(>Ñ$�E˜9ð "'¬
´G¸IÀqÓ4IÐ3JÈD×L\ÑL\Ð]f×]mÑ]mÐos÷  pHñ  pHó  MIó  )Jñ  "JØ(>ò!@ˆÔô 2@ÀÓ1FÑ.ˆŒ
�D”K ¥ùòC6ùó WùóIùóGùò0ùó!@s*   �4K(ÃK-ÃK-Å&K3Æ4K9Ç!*K?É:ALNÚsource_ruler-   c                 ó    ‡‡— ‰€| j                   Št        t           «       Šdt        dt        t           fˆˆfd„}t        |g|«      D ]  }Œ ‰S )z4Returns all init_ptrs accessible by rule (recursive)r   r-   c              3   óú   •K  — | j                   rJ | «       ‚‰|    D ][  }t        |d«      }‰j                  |«       |j                  sŒ-|j                  }|j                   rŒFt        |t        «      sJ ‚|–— Œ] y ­w)Nr   )r\   r   Úaddr   r0   r   r   )r   rT   Úinit_ptrÚnew_rÚ	init_ptrsrz   s       €€r   Ú_expand_rulez1GrammarAnalyzer.expand_rule.<locals>._expand_rule»   sk   øè ø€ Ø—|’|Ð) TÓ)Ð#à$ TÔ*�Ü" 1 a›=�Ø—‘˜hÔ'à—;“;Ø$ŸM™M�EØ Ÿ=›=Ü)¨%´Ô=Ð=Ð=Ø#›ñ +ùs   ƒAA;Á	A;Á"A;)rz   r   r   r   r   r   )r   rˆ   rz   r�   Ú_rŽ   s     `  @r   r|   zGrammarAnalyzer.expand_rule´   s[   ù€ ð Ð"Ø"×2Ñ2ˆOäœwÑ'Ó)ˆ	ð	$œ{ð 	$¬x¼Ñ/Dö 	$ô �k�] LÖ1ˆAØð 2ð Ðr!   )FFr   )
r>   r?   r@   r   rE   r    r   r   r   r|   rF   r!   r   ri   ri   Œ   s:   „ ñ%G Jð %G°tð %GÈ4ó %GñN {ð ÈZÐX_ÑM`ô r!   ri   N)Ú__doc__Úcollectionsr   r   Útypingr   r   r   r   r	   Úutilsr   r   r   r   Ú
exceptionsr   Úgrammarr   r   r   r   Úcommonr   r   rU   rH   rZ   rg   ri   rF   r!   r   Ú<module>r˜      s[   ðÙ ,ç ,ß 7Õ 7ç 4Ó 4Ý %ß 9Ó 9Ý ÷"-ñ "-ðJ 	�'Ñ€÷uñ uò$ò;#÷|?ò ?r!   