ó
    ÖÁ“iU:  ã                   óÞ   • S r SSKJrJrJrJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJrJr  SSKJrJrJr  S	S
KJr  SSKJr  S	SKJr  S	SKJrJrJrJrJr  \(       a  SSK J!r!J"r"   " S S5      r#g)a¿  This module implements an Earley parser.

The core Earley algorithm used here is based on Elizabeth Scott's implementation, here:
    https://www.sciencedirect.com/science/article/pii/S1571066108001497

That is probably the best reference for understanding the algorithm here.

The Earley parser outputs an SPPF-tree as per that document. The SPPF tree format
is explained here: https://lark-parser.readthedocs.io/en/latest/_static/sppf/sppf.html
é    )ÚTYPE_CHECKINGÚCallableÚOptionalÚListÚAny)Údequeé   )ÚToken)ÚTree)ÚUnexpectedEOFÚUnexpectedToken)ÚloggerÚ
OrderedSetÚ
dedup_listé   )ÚGrammarAnalyzer)ÚNonTerminal)ÚItem)ÚForestSumVisitorÚ
SymbolNodeÚStableSymbolNodeÚ	TokenNodeÚForestToParseTree)Ú	LexerConfÚ
ParserConfc                   ó�   • \ rS rSr% S\S'   S\S'   \\S'   SS\S4SSSSS	\S
\S\S\\\	\
/\4      S\4S jjrS rSS jrS rSrg)ÚParseré   r   Ú
lexer_confr   Úparser_confÚdebugTFÚterm_matcherÚresolve_ambiguityÚ
tree_classÚordered_setsc                 ó¦  • [        U5      nXl        X l        X@l        XPl        X`l        U(       a  [        O[        U l        U(       a  [        O[        U l
        UR                  U l        UR                  U l        UR                  U l        0 U l        UR                   V	V
s1 s H*  o™R                     H  oªR"                  (       d  M  U
iM     M,     sn
n	U l        UR                   V	V
s1 s H*  o™R                     H  oªR"                  (       a  M  U
iM     M,     sn
n	U l        S U l        UR                   Hœ  nUR*                  U R                  ;  aL  UR-                  UR*                  5       Vs/ s H  oÌR.                  PM     snU R                  UR*                  '   U R(                  b  Mx  UR0                  R2                  c  M‘  [4        U l        Mž     U R                  R6                  S:w  aH  U R(                  c;  U R                  R8                   H!  nUR2                  (       d  M  [4        U l          O   X0l        g s  sn
n	f s  sn
n	f s  snf )NÚbasic)r   r   r    r#   r!   r   r   ÚsetÚSetr   r   ÚFIRSTÚNULLABLEÚ	callbacksÚpredictionsÚrulesÚ	expansionÚis_termÚ	TERMINALSÚNON_TERMINALSÚforest_sum_visitorÚoriginÚexpand_ruleÚruleÚoptionsÚpriorityr   Ú
lexer_typeÚ	terminalsr"   )Úselfr   r    r"   r#   r!   r$   r%   ÚanalysisÚrÚsymr6   ÚxÚterms                 ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/lark/parsers/earley.pyÚ__init__ÚParser.__init__    s²  € ô # ;Ó/ˆØ$ŒØ&ÔØ!2ÔØŒ
ØŒ	Þ!-•:´3ˆŒÞ.:Õ*Ä
ˆŒà—^‘^ˆŒ
Ø ×)Ñ)ˆŒØ$×.Ñ.ˆŒàˆÔð )4×(9Ò(9ÔaÒ(9 1Ç[Å[¸c×T_ÕT_Ÿ3Á[™3Ñ(9ÒaˆŒØ,7×,=Ò,=ÔiÒ,= qÏÍÀ#×\gÕ\gŸsÉ™sÑ,=ÒiˆÔà"&ˆÔØ×%Ô%ˆDØ�{‰{ $×"2Ñ"2Ó2ØAI×AUÑAUÐVZ×VaÑVaÔAbÓ0cÒAb¸A·´ÑAbÑ0c�× Ñ  §¡Ñ-ð ×&Ñ&Ó.°4·<±<×3HÑ3HÓ3TÜ*:�Ö'ñ &ð �?‰?×%Ñ%¨Ó0°T×5LÑ5LÑ5TØŸ™×1Ô1�Ø—=—=‘=Ü.>�DÔ+Ùñ 2ð
 )Õùó/ bùÛiùò
 1ds   Â##IÃ

IÃ,#IÄ
IÅ3Ic                 ó„
  • 0 nX1   n[        U5      nU(       Ga"  UR                  5       n	U	R                  (       Gar  U	R                  c‚  U	R                  U	R
                  U4n
X¥;   a  XZ   OUR                  X R                  " U
6 5      U	l        U	R                  R                  U	R                  U	R                  U	R
                  SS5        U	R                  R                  XIR
                     ;   Ga@  XIR
                     U	R                     nUR                  XKR                     ;   a  XKR                     UR                     nOUn[        UR                  UR                  UR
                  5      nUR                  UR
                  U4n
X¥;   a  XZ   OUR                  X R                  " U
6 5      Ul        UR                  R                  XÉR                  5        UR                   U R"                  ;   a  UR%                  U5        GO(X×;  a"  UR%                  U5        UR'                  U5        GOÿU	R
                  U:H  nU(       a"  U	R                  XiR                  R                  '   X9R
                      Vs/ s H/  oÿR                   c  M  UR                   U	R                  :X  d  M-  UPM1     nnU Hô  nUR)                  5       nUR                  UR
                  U4n
X¥;   a  XZ   OUR                  X R                  " U
6 5      Ul        UR                  R                  UR                  UR                  XR                  U	R                  5        UR                   U R"                  ;   a  UR%                  U5        MË  X×;  d  MÒ  UR%                  U5        UR'                  U5        Mö     GOƒU	R                   U R*                  ;   Gah  / nU R,                  U	R                       H!  n[        USU5      nUR'                  U5        M#     U	R                   U;   a¹  U	R)                  5       nUR                  U	R
                  U4n
X¥;   a  XZ   OUR                  X R                  " U
6 5      Ul        UR                  R                  UR                  UR                  UR
                  U	R                  XiR                      5        UR'                  U5        U HY  nUR                   U R"                  ;   a  UR%                  U5        M0  X×;  d  M7  UR%                  U5        UR'                  U5        M[     U(       a  GM!  ggs  snf )at  The core Earley Predictor and Completer.

At each stage of the input, we handling any completed items (things
that matched on the last cycle) and use those to predict what should
come next in the input stream. The completions and any predicted
non-terminals are recursively processed until we reach a set of,
which can be added to the scan list for the next scanner cycle.Nr   )r   ÚpopÚis_completeÚnodeÚsÚstartÚ
setdefaultr   Ú
add_familyr6   r4   ÚpreviousÚcolumnr   ÚptrÚadd_pathÚexpectr1   ÚaddÚappendÚadvancer2   r-   )r;   ÚiÚto_scanÚcolumnsÚtransitivesÚ
node_cacheÚheld_completionsrM   ÚitemsÚitemÚlabelÚ
transitiveÚroot_transitiveÚnew_itemÚis_empty_itemÚ
originatorÚoriginatorsÚ	new_itemsr6   s                      rA   Úpredict_and_completeÚParser.predict_and_completeN   sv  € ð Ðà‘ˆä�f“ˆßØ—9‘9“;ˆDð ××ÐØ—9‘9Ñ$Ø!ŸV™V T§Z¡Z°Ð3�EØ5:Ó5H 
Ò 1Èj×NcÑNcÐdi×kzÒkzð  }Bð  lCó  OD�D”IØ—I‘I×(Ñ(¨¯©°·±¸D¿J¹JÈÈdÔSð
 —9‘9×#Ñ# {·:±:Ñ'>Ô>Ø!,¯Z©ZÑ!8¸¿¹Ñ!@�JØ!×*Ñ*¨k×:KÑ:KÑ.LÓLØ*5×6GÑ6GÑ*HÈ×I\ÑI\Ñ*]™à*4˜ä# J§O¡O°Z·^±^ÀZ×EUÑEUÓV�HØ,×.Ñ.°×0EÑ0EÀqÐI�EØ9>Ó9L JÒ$5ÐR\×RgÑRgÐhm×o~Òo~ð  AFð  pGó  SH�H”MØ—M‘M×*Ñ*¨?¿I¹IÔFØ—‘¨$¯.©.Ó8àŸ™ HÖ-Ø!Ó/àŸ
™
 8Ô,ØŸ™ XÔ.ùð %)§J¡J°!¡O�MÞ$Ø=A¿Y¹YÐ(¯©×)9Ñ)9Ñ:à@GÏ
É
Ò@Só  #VÒ@S°*×WhÑWh£:ð  zD÷  zKñ  zKð  OS÷  OUñ  OUñ  zU§:Ñ@S�Kð  #VÛ&1˜
Ø#-×#5Ñ#5Ó#7˜Ø!)§¡¨Z×-=Ñ-=¸qÐ A˜Ø=BÓ=P¨
Ò(9ÐV`×VkÑVkÐlq÷  tCò  tCð  EJð  tKó  WL˜œØ Ÿ™×0Ñ0°·±¸X¿]¹]ÈAÏÉÐ`d×`iÑ`iÔjØ#Ÿ?™?¨d¯n©nÓ<à#ŸK™K¨Ö1Ø%Õ3à"ŸJ™J xÔ0Ø!ŸL™L¨Ö2ó '2ð —‘ × 2Ñ 2Ô2Ø�	Ø ×,Ñ,¨T¯[©[Ô9�DÜ# D¨!¨QÓ/�HØ×$Ñ$ XÖ.ñ :ð
 —;‘;Ð"2Ó2Ø#Ÿ|™|›~�HØ%ŸZ™Z¨¯©°QÐ7�EØ9>Ó9L JÒ$5ÐR\×RgÑRgÐhm×o~Òo~ð  AFð  pGó  SH�H”MØ—M‘M×,Ñ,¨X¯Z©Z¸¿¹ÈÏÉÐX\×XaÑXaÐcs×tÑtñ  dAô  BØ×$Ñ$ XÔ.ã )�HØ—‘¨$¯.©.Ó8ØŸ™ HÖ-Ø!Õ/ØŸ
™
 8Ô,ØŸ™ XÖ.ñ !*÷O ‹eùòT #Vs   É:T=ÊT=Ê*T=Nc                 óø  ^ ^^^^^• U U4S jnUUU UU4S jnT R                   mT R                  R                  m0 /mU Vs1 s H  owR                  iM     nnSn0 n	UR	                  U5       HV  n
T R                  WUTTU	5        U" XzU5      u  p9US-  nUR                  5         Xƒ Vs1 s H  owR                  iM     sn-  nMX     T R                  WUTTU	5        U[        T5      S-
  :X  d   eU$ s  snf s  snf )Nc                 ó>  >• U R                   (       a  gU R                  5       nUR                   (       di  UR                  TR                  ;  a  gUR                  R
                  T:X  a  UR                  T:X  a  gUR                  5       nUR                   (       d  Mi  g)NTF)rF   rS   rP   r+   r6   r4   )r[   Úquasir;   Ústart_symbols     €€rA   Úis_quasi_completeÚ(Parser._parse.<locals>.is_quasi_complete¬   st   ø€ Ø××Øà—L‘L“NˆEØ×'×'Ø—<‘< t§}¡}Ó4Ø Ø—:‘:×$Ñ$¨Ó4¸¿¹ÈÓ9UØ ØŸ™›�ð ×'×'Ñ'ð ó    c           	      óè  >• TR                  5       nTR                  5       nTR                  U5        TR                  0 5        0 nTR                  U5       GH9  nT" UR                  U5      (       d  M  UR                  5       nUR                  UR
                  U S-   4n[        U[        5      (       a  TR                  UR                  5      OSn	[        XSS9n
X…;   a  XX   OUR                  UTR                  " U6 5      Ul        UR                  R                  UR                  UR                  UR
                  UR                  U
5        UR                  TR                   ;   a  UR#                  U5        GM(  UR#                  U5        GM<     U(       dP  U(       dI  U V s1 s H  o R                  R$                  iM     nn ['        X[)        U5      [+        S U 5       5      S9eX54$ s  sn f )a@  The core Earley Scanner.

This is a custom implementation of the scanner that uses the
Lark lexer to match tokens. The scan list is built by the
Earley predictor, based on the previously completed tokens.
This ensures that at each phase of the parse we have a custom
lexer context, allowing for more complex ambiguities.r   Nr   )r8   c              3   ó8   #   • U  H  oR                   v •  M     g 7f©N©rH   ©Ú.0rT   s     rA   Ú	<genexpr>Ú.Parser._parse.<locals>.scan.<locals>.<genexpr>ã   s   é € ÐcyÒqxÐlm×dgÖdgÒqxùó   ‚)Úconsidered_rulesÚstate)r)   rR   rP   rS   rH   rI   Ú
isinstancer
   ÚgetÚtyper   rJ   r   rG   rK   r6   r1   rQ   Únamer   r(   Ú	frozenset)rT   ÚtokenrU   Únext_to_scanÚnext_setrX   r[   r_   r\   r@   Ú
token_noderP   rV   Úmatchr;   r:   rW   s               €€€€€rA   ÚscanÚParser._parse.<locals>.scan¼   s•  ø€ ð  Ÿ8™8›:ˆLØ—x‘x“zˆHØ�N‰N˜8Ô$Ø×Ñ˜rÔ"ØˆJàŸ™ ×)�Ù˜Ÿ™ e×,Ó,Ø#Ÿ|™|›~�HØ%ŸZ™Z¨¯©¸¸Q¹Ð?�Eô 9CÀ5Ì%×8PÑ8P˜9Ÿ=™=¨¯©Ô4ÐVZ�Dô
 "+¨5ÀÑ!C�JØ9>Ó9L JÒ$5ÐR\×RgÑRgÐhmÐos×o~Òo~ð  AFð  pGó  SH�H”MØ—M‘M×,Ñ,¨X¯Z©Z¸¿¹ÀHÇNÁNÐTX×T]ÑT]Ð_iÔjà—‘¨$¯.©.Ó8à$×(Ñ(¨×2ð !Ÿ™ X×.ñ+ *ö. ¦LÙ18Ó9²¨AŸ(™(Ÿ-œ-±�Ð9Ü% eÄcÈ'ÃlÔZcÑcyÑqxÓcyÓZyÑzÐzàÐ+Ð+ùò :s   Æ'G/r   r   )r"   r   Úterminals_by_namerP   Úlexrd   ÚclearÚlen)r;   ÚlexerrV   rU   ri   rj   r‚   rT   ÚexpectsrX   r}   r�   r:   rW   s   ` ` `      @@@rA   Ú_parseÚParser._parseª   sþ   ý€ ö	÷ )	,ñ )	,ðZ ×!Ñ!ˆà—O‘O×5Ñ5ˆ	ð �dˆñ &-Ó-¢W —8”8¡WˆÐ-ØˆØˆ
Ø—Y‘Y˜wÖ'ˆEØ×%Ñ% a¨°'¸;È
ÔSá"& q°Ó"9ÑˆGØ�‰FˆAà�M‰MŒOØ¨'Ó2ª' QŸœ©'Ñ2Ñ2ŠGñ (ð 	×!Ñ! ! W¨g°{ÀJÔOð ”C˜“L ‘NÓ"Ð"Ð"Øˆùò! .ùò 3s   ÁC2Â)C7c                 ó  ^• U(       d   U5       e[        U5      mU R                  5       /nU R                  5       nU R                  T    HQ  n[        USS5      nUR                  U R
                  ;   a  UR                  U5        M=  US   R                  U5        MS     U R                  XUT5      n[        U4S jUS    5       5      nU(       d?  U Vs/ s H  oˆR                  R                  PM     n	n[        U	[        S U 5       5      S9e[        U5      S:”  a  [        S5      eUu  n
U R                  (       a   SSKJn   U" 5       nUR#                  U
S	5        U R*                  bp  U R,                  (       + n[/        U R*                  U R0                  U R2                  =(       a    U R3                  5       U R,                  U5      nUR5                  U
5      $ U
$ s  snf ! [$         a    [&        R(                  " S
5         N¦f = f)Nr   c              3   óÆ   >#   • U  HV  oR                   (       d  M  UR                  c  M$  UR                  T:X  d  M6  UR                  S:X  d  MH  UR                  v •  MX     g 7f)Nr   )rF   rG   rH   rI   )rr   Únri   s     €rA   rs   ÚParser.parse.<locals>.<genexpr>  s_   øé € ð  Mª{¨!¿m½m›vÐPQ×PVÑPV›vÐgh×gjÑgjÐnzÑgz›vð  @A÷  @Gñ  @Gð  KLñ  @L›v˜qŸvžvª{ùs   ƒA!›A!ªA!¼A!ÁA!éÿÿÿÿc              3   ó8   #   • U  H  oR                   v •  M     g 7fro   rp   rq   s     rA   rs   r�      s   é € ÐCYÒQXÈAÇCÆCÒQXùru   )rw   r   zOEarley should not generate multiple start symbol items! Please report this bug.)ÚForestToPyDotVisitorzsppf.pngzBCannot find dependency 'pydot', will not generate sppf debug image)r   r)   r-   r   rP   r1   rQ   rŠ   r   r{   r   r|   r‡   ÚRuntimeErrorr!   Úearley_forestr’   ÚvisitÚImportErrorr   Úwarningr   r#   r   r,   r3   Ú	transform)r;   rˆ   rI   rV   rU   r6   r[   Ú	solutionsÚtÚexpected_terminalsÚsolutionr’   Údebug_walkerÚ	use_cacheÚtransformerri   s                  @rA   ÚparseÚParser.parse  sÚ  ø€ ÞÐ�eÓˆuÜ" 5Ó)ˆà—8‘8“:�,ˆØ—(‘(“*ˆð
 ×$Ñ$ \Ô2ˆDÜ˜˜a Ó#ˆDØ�{‰{˜dŸn™nÓ,Ø—‘˜DÖ!à˜‘
—‘˜tÖ$ñ 3ð —+‘+˜e¨g°|ÓDˆô
 ô  M¨w°rª{ó  Mó  Mˆ	ÞÙ9@Ó!Aº°A§(¡(§-¤-¹ÐÐ!AÜÐ 2¼)ÑCYÑQXÓCYÓ:YÑZÐZÜˆy‹>˜AÓÜÐpÓqÐqØ‰
ˆà�:�:Ý;ð9Ù3Ó5�ð ×"Ñ" 8¨ZÔ8ð �9‰9Ñ ð !×2Ñ2Ô2ˆIÜ+¨D¯I©I°t·~±~Àt×G^ÑG^×G|Ðcg×czÑczÓc|ð  C÷  Uñ  Uð  W`ó  aˆKØ×(Ñ(¨Ó2Ð2ð ˆùò3 "Bøô ó eÜ—’ÐcÖdðeús   ÃGÅG$ Ç$ HÈH)r*   r2   r+   r)   r   r1   r   r,   r!   r3   r   r    r-   r#   r"   ro   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Úboolr   r   r   Ústrr   r   rB   rd   rŠ   r    Ú__static_attributes__© rl   rA   r   r      s‚   ‡ ØÓØÓØƒKð *.¸5ØBFÐ[_ñ+) ;ð +)¸\ð +)ÐYað +)Ø$(ð+)Ø6:ð+)à% h°°T¨{¸CÐ/?Ñ&@ÑAð+)àVZõ+)ò\Z/ôx[õz1rl   r   N)$Ú__doc__Útypingr   r   r   r   r   Úcollectionsr   rˆ   r
   Útreer   Ú
exceptionsr   r   Úutilsr   r   r   Úgrammar_analysisr   Úgrammarr   Úearley_commonr   r”   r   r   r   r   r   Úcommonr   r   r   rª   rl   rA   Ú<module>rµ      sF   ðñ	÷ @Õ ?Ý å Ý ß 7ß 2Ñ 2Ý -Ý !Ý ß gÕ gæß.÷]ò ]rl   