§
    €zIf•“  ã                   óÔ   — d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddl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 ddlmZ  G d	„ d
¦  «        Zd„ Zedk    r
 e¦   «          dgZdS )a¡	  
A graphical tool for exploring the recursive descent parser.

The recursive descent parser maintains a tree, which records the
structure of the portion of the text that has been parsed.  It uses
CFG productions to expand the fringe of the tree, and matches its
leaves against the text.  Initially, the tree contains the start
symbol ("S").  It is shown in the main canvas, to the right of the
list of available expansions.

The parser builds up a tree structure for the text using three
operations:

  - "expand" uses a CFG production to add children to a node on the
    fringe of the tree.
  - "match" compares a leaf in the tree to a text token.
  - "backtrack" returns the tree to its state before the most recent
    expand or match operation.

The parser maintains a list of tree locations called a "frontier" to
remember which nodes have not yet been expanded and which leaves have
not yet been matched against the text.  The leftmost frontier node is
shown in green, and the other frontier nodes are shown in blue.  The
parser always performs expand and match operations on the leftmost
element of the frontier.

You can control the parser's operation by using the "expand," "match,"
and "backtrack" buttons; or you can use the "step" button to let the
parser automatically decide which operation to apply.  The parser uses
the following rules to decide which operation to apply:

  - If the leftmost frontier element is a token, try matching it.
  - If the leftmost frontier element is a node, try expanding it with
    the first untried expansion.
  - Otherwise, backtrack.

The "expand" button applies the untried expansion whose CFG production
is listed earliest in the grammar.  To manually choose which expansion
to apply, click on a CFG production from the list of available
expansions, on the left side of the main window.

The "autostep" button will let the parser continue applying
applications to the tree until it reaches a complete parse.  You can
cancel an autostep in progress at any time by clicking on the
"autostep" button again.

Keyboard Shortcuts::
      [Space]	 Perform the next expand, match, or backtrack operation
      [a]	 Step through operations until the next complete parse
      [e]	 Perform an expand operation
      [m]	 Perform a match operation
      [b]	 Perform a backtrack operation
      [Delete]	 Reset the parser
      [g]	 Show/hide available expansions list
      [h]	 Help
      [Ctrl-p]	 Print
      [q]	 Quit
é    )ÚButtonÚFrameÚIntVarÚLabelÚListboxÚMenuÚ	ScrollbarÚTk)ÚFont)Ú	CFGEditorÚTreeSegmentWidgetÚtree_to_treesegment)ÚCanvasFrameÚEntryDialogÚShowTextÚ
TextWidget)ÚSteppingRecursiveDescentParser)ÚTree)Úin_idlec                   ó8  — e Zd ZdZd4d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd5d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Z d!„ Z!d"„ Z"d#„ Z#d5d$„Z$d%„ Z%d&„ Z&d'„ Z'd(„ Z(d)„ Z)d*„ Z*d+„ Z+d,„ Z,d-„ Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1d2„ Z2d3„ Z3dS )6ÚRecursiveDescentAppaÎ  
    A graphical tool for exploring the recursive descent parser.  The tool
    displays the parser's tree and the remaining text, and allows the
    user to control the parser's operation.  In particular, the user
    can expand subtrees on the frontier, match tokens on the frontier
    against the text, and backtrack.  A "step" button simply steps
    through the parsing process, performing the operations that
    ``RecursiveDescentParser`` would use.
    r   c                 ó^  — || _         t          ||¦  «        | _        t          ¦   «         | _        | j                             d¦  «         |                      ¦   «          |                      | j        ¦  «         t          | j        ¦  «        | _	        | j	         
                    d¦  «         d| _        d| _        t          | j        ¦  «        | _        | j         
                    d¦  «         |                      | j        ¦  «         |                      | j        ¦  «         |                      | j        ¦  «         |                      | j        ¦  «         |                      | j        ¦  «         | j                             | j         ¦  «         | j                             d| j        ¦  «         d S )Nz$Recursive Descent Parser Applicationé   r   é   z<Configure>)Ú_sentr   Ú_parserr
   Ú_topÚtitleÚ_init_bindingsÚ_init_fontsr   Ú_animation_framesÚsetÚ_animating_lockÚ	_autostepÚ_show_grammarÚ_init_menubarÚ_init_buttonsÚ_init_feedbackÚ_init_grammarÚ_init_canvasÚ
initializeÚ_canvasÚbindÚ
_configure)ÚselfÚgrammarÚsentÚtraces       úI/var/www/piapp/venv/lib/python3.11/site-packages/nltk/app/rdparser_app.pyÚ__init__zRecursiveDescentApp.__init__X   sy  € ØˆŒ
Ý5°g¸uÑEÔEˆŒõ ‘D”DˆŒ	ØŒ	�ŠÐ>Ñ?Ô?Ð?ð 	×ÒÑÔÐð 	×Ò˜œÑ#Ô#Ð#õ "(¨¬	Ñ!2Ô!2ˆÔØÔ×"Ò" 1Ñ%Ô%Ð%Ø ˆÔØˆŒõ $ D¤IÑ.Ô.ˆÔØÔ×Ò˜qÑ!Ô!Ð!ð 	×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜DœIÑ&Ô&Ð&Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜$œ)Ñ$Ô$Ð$ð 	Œ×Ò ¤
Ñ+Ô+Ð+ð 	Œ×Ò˜-¨¬Ñ9Ô9Ð9Ð9Ð9ó    c                 ó¦  — t          t          ¦   «         d         ¬¦  «        | _        |                     d| j        ¦  «         t	          |¦  «        | _        | j                             | j                             d¦  «        ¦  «         t          dd| j                             ¦   «         ¬¦  «        | _	        t          d| j                             ¦   «         ¬¦  «        | _
        | j                             ¦   «         d	k     r| j                             ¦   «         d
z
  }n| j                             ¦   «         d
z   }t          dd|¬¦  «        | _        d S )NÚfont©r7   z*FontÚsizeÚ	helveticaÚbold)ÚfamilyÚweightr9   )r<   r9   r   é   )r   r   Ú_sysfontÚ
option_addr   Ú_sizer"   ÚcgetÚgetÚ	_boldfontÚ_fontÚ_bigfont)r/   ÚrootÚbigs      r3   r    zRecursiveDescentApp._init_fonts‚   s  € å¥&¡(¤(¨6Ô"2Ð3Ñ3Ô3ˆŒØ�Š˜ ¤Ñ/Ô/Ð/õ ˜D‘\”\ˆŒ
ØŒ
�Š�t”}×)Ò)¨&Ñ1Ô1Ñ2Ô2Ð2å [¸ÀdÄjÇnÂnÑFVÔFVÐWÑWÔWˆŒÝ °4´:·>²>Ñ3CÔ3CÐDÑDÔDˆŒ
ØŒ:�>Š>ÑÔ˜aÒÐØ”*—.’.Ñ"Ô" QÑ&ˆCˆCà”*—.’.Ñ"Ô" QÑ&ˆCÝ K¸ÀSÐIÑIÔIˆŒˆˆr5   c           
      óð  — t          |¦  «        x| _        }| j                             ddd¬¦  «         t          | j        | j        d¬¦  «        | _        | j                             ¦   «          t          | j        ddd	d
| j        dd¬¦  «        | _        | j                             ddd¬¦  «         t          | j
                             ¦   «                              ¦   «         ¦  «        | _        | j        D ] }| j                             dd|z  ¦  «         Œ!| j                             t!          t#          | j        ¦  «        d¦  «        ¬¦  «         t#          | j        ¦  «        dk    rmt%          | j        d¬¦  «        }| j                             |j        ¬¦  «         |                     | j        j        ¬¦  «         |                     dd¬¦  «         | j                             d| j        ¦  «         d S )NÚbothÚleftr>   )ÚfillÚsideÚpadxzAvailable Expansions)r7   ÚtextÚsingleÚgrooveÚwhitez#909090ú#004040z#c0f0c0)Ú
selectmodeÚreliefÚ
backgroundÚ
foregroundr7   ÚselectforegroundÚselectbackgroundÚrightr   ©rM   rL   ÚexpandÚendz  %sé   )ÚheightÚvertical)Úorient)Úyscrollcommand)ÚcommandÚy)rM   rL   z<<ListboxSelect>>)r   Ú
_prodframeÚpackr   rD   Ú_prodlist_labelr   rE   Ú	_prodlistÚlistr   r0   ÚproductionsÚ_productionsÚinsertÚconfigÚminÚlenr	   r"   Úyviewr-   Ú_prodlist_select)r/   ÚparentÚ	listframeÚ
productionÚ
listscrolls        r3   r)   z!RecursiveDescentApp._init_grammar“   så  € å&+¨F¡m¤mÐ3ˆŒ˜)ØŒ×Ò &¨v¸AÐÑ>Ô>Ð>Ý$ØŒO $¤.Ð7Mð 
ñ  
ô  
ˆÔð 	Ô×!Ò!Ñ#Ô#Ð#Ý ØŒOØØØØ Ø”Ø&Ø&ð	
ñ 	
ô 	
ˆŒð 	Œ×Ò ¨v¸aÐÑ@Ô@Ð@å  ¤×!5Ò!5Ñ!7Ô!7×!CÒ!CÑ!EÔ!EÑFÔFˆÔØÔ+ð 	@ð 	@ˆJØŒN×!Ò! %¨&°:Ñ*=Ñ?Ô?Ð?Ð?ØŒ×Ò¥S­¨TÔ->Ñ)?Ô)?ÀÑ%DÔ%DÐÑEÔEÐEõ ˆtÔ Ñ!Ô! BÒ&Ð&Ý" 4¤?¸:ÐFÑFÔFˆJØŒN×!Ò!°´Ð!Ñ@Ô@Ð@Ø×Ò d¤nÔ&:ÐÑ;Ô;Ð;Ø�OŠO ¨cˆOÑ2Ô2Ð2ð 	Œ×ÒÐ/°Ô1FÑGÔGÐGÐGÐGr5   c                 ó†  — | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d	| j        ¦  «         | j                              d
| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j	        ¦  «         | j                              d| j
        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         | j                              d| j        ¦  «         d S )Nz<Control-q>z<Control-x>z<Escape>ÚeÚmz<Alt-m>z<Control-m>Úbz<Alt-b>z<Control-b>z<Control-z>z<BackSpace>Úaz<Control-space>z<Control-c>z<space>z<Delete>z<Control-p>z<Control-h>z<F1>z<Control-g>z<Control-t>)r   r-   Údestroyr\   ÚmatchÚ	backtrackÚautostepÚcancel_autostepÚstepÚresetÚ
postscriptÚhelpÚedit_grammarÚedit_sentence©r/   s    r3   r   z"RecursiveDescentApp._init_bindings·   s"  € àŒ	�Š�} d¤lÑ3Ô3Ð3ØŒ	�Š�} d¤lÑ3Ô3Ð3ØŒ	�Š�z 4¤<Ñ0Ô0Ð0ØŒ	�Š�s˜DœKÑ(Ô(Ð(ð 	Œ	�Š�s˜DœJÑ'Ô'Ð'ØŒ	�Š�y $¤*Ñ-Ô-Ð-ØŒ	�Š�} d¤jÑ1Ô1Ð1ØŒ	�Š�s˜DœNÑ+Ô+Ð+ØŒ	�Š�y $¤.Ñ1Ô1Ð1ØŒ	�Š�} d¤nÑ5Ô5Ð5ØŒ	�Š�} d¤nÑ5Ô5Ð5ØŒ	�Š�} d¤nÑ5Ô5Ð5ØŒ	�Š�s˜DœMÑ*Ô*Ð*àŒ	�ŠÐ(¨$¬-Ñ8Ô8Ð8ØŒ	�Š�} dÔ&:Ñ;Ô;Ð;ØŒ	�Š�y $¤)Ñ,Ô,Ð,ØŒ	�Š�z 4¤:Ñ.Ô.Ð.ØŒ	�Š�} d¤oÑ6Ô6Ð6ð 	Œ	�Š�} d¤iÑ0Ô0Ð0ØŒ	�Š�v˜tœyÑ)Ô)Ð)ð 	Œ	�Š�} dÔ&7Ñ8Ô8Ð8ØŒ	�Š�} dÔ&8Ñ9Ô9Ð9Ð9Ð9r5   c                 ó,  — t          |¦  «        x| _        }|                     dddd¬¦  «         t          |ddd| j        ¬	¦  «                             d
¬¦  «         t          |ddd| j        ¬	¦  «                             d
¬¦  «         t          |dddd| j        ¬¦  «                             d
¬¦  «         t          |dddd| j        ¬¦  «                             d
¬¦  «         t          |dddd| j        ¬¦  «                             d
¬¦  «         d S )NÚnoneÚbottomé   r>   ©rL   rM   rN   ÚpadyÚStepz#90c0d0Úblack)rO   rV   rW   rc   rK   ©rM   ÚAutostepÚExpandr   z#90f090)rO   Ú	underlinerV   rW   rc   ÚMatchÚ	Backtrackz#f0a0a0)	r   Ú_buttonframerf   r   r€   r~   r\   r|   r}   )r/   rr   Úbuttonframes      r3   r'   z!RecursiveDescentApp._init_buttonsØ   sT  € å*/°©-¬-Ð7ˆÔ˜KØ×Ò˜f¨8¸!À!ÐÑDÔDÐDÝØØØ ØØ”Ið	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØØ ØØ”Mð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØØØ ØØ”Kð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØØØ ØØ”Jð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
ÝØØØØ ØØ”Nð	
ñ 	
ô 	
÷ Š$�Fˆ$Ñ
Ô
Ð
Ð
Ð
r5   c                 ó®   — d| _         | j                             ¦   «         \  }}}}|j        dz
  }d||||fz  | j        d<   |                      ¦   «          d S )Nr   é   z%d %d %d %dÚscrollregion)r$   Ú_cframer™   r_   r,   Ú_redraw)r/   ÚeventÚx1Úy1Úx2Úy2s         r3   r.   zRecursiveDescentApp._configure  s\   € ØˆŒØœ<×4Ò4Ñ6Ô6ÑˆˆR��RØŒ\˜AÑˆØ'4¸¸BÀÀBÐ7GÑ'GˆŒ�^Ñ$Ø�Š‰Œˆˆˆr5   c                 ó  — t          |¦  «        x| _        }|                     dddd¬¦  «         t          |d| j        ¬¦  «        | _        | j                             d¬¦  «         t          |d	d
¬¦  «        }|                     ddd
d¬¦  «         t          |dd| j        ¬¦  «        | _        t          |dddd| j        ¬¦  «        | _        | j                             d¬¦  «         | j                             ddd
¬¦  «         d S )NÚxr‰   rŠ   r‹   zLast Operation:)rO   r7   rK   r�   Úsunkenr   )rU   ÚborderrZ   r   )rL   rM   r\   rN   z#007070z#f0f0f0)rW   rV   r7   Úwé   rS   )ÚanchorÚwidthrW   rV   r7   r[   )r   Ú_feedbackframerf   r   rE   Ú_lastoper_labelÚ
_lastoper1Ú
_lastoper2)r/   rr   ÚfeedbackframeÚlastoperframes       r3   r(   z"RecursiveDescentApp._init_feedback  s+  € Ý.3°F©m¬mÐ;ˆÔ˜mØ×Ò ¨(¸ÀÐÑCÔCÐCÝ$ØÐ 1¸¼
ð 
ñ  
ô  
ˆÔð 	Ô×!Ò! vÐ!Ñ.Ô.Ð.Ý˜m°HÀQÐGÑGÔGˆØ×Ò ¨'¸!À!ÐÑDÔDÐDÝØ i¸IÈDÌJð
ñ 
ô 
ˆŒõ  ØØØØ Ø Ø”ð
ñ 
ô 
ˆŒð 	Œ×Ò &ÐÑ)Ô)Ð)ØŒ×Ò &¨s¸1ÐÑ=Ô=Ð=Ð=Ð=r5   c                 óÞ   — t          |dddd¬¦  «        | _        | j                             dddd¬	¦  «         | j                             ¦   «         x}| _        d | _        g | _        d | _        d S )
NrR   é
   r>   r£   )rV   Úcloseenoughr¤   rU   r   rJ   Útop)r\   rL   rM   rŒ   )r   rš   rf   Úcanvasr,   Ú_treeÚ_textwidgetsÚ	_textline)r/   rr   r³   s      r3   r*   z RecursiveDescentApp._init_canvas&  s~   € Ý"ØØàØØð
ñ 
ô 
ˆŒð 	Œ×Ò ¨°eÀ!ÐÑDÔDÐDØ $¤× 3Ò 3Ñ 5Ô 5Ð5ˆ�”ð ˆŒ
ØˆÔØˆŒˆˆr5   c                 óê  — t          |¦  «        }t          |d¬¦  «        }|                     dd| j        d¬¦  «         |                     dd| j        d¬¦  «         |                     dd	| j        d
¬¦  «         |                     dd|¬¦  «         t          |d¬¦  «        }|                     dd| j        d¬¦  «         |                     dd| j        d¬¦  «         |                     dd|¬¦  «         t          |d¬¦  «        }|                     dd	| j        d¬¦  «         | 	                    ¦   «          |                     dd| j
        d¬¦  «         |                     dd| j        d¬¦  «         | 	                    ¦   «          |                     dd| j        d¬¦  «         |                     dd|¬¦  «         t          |d¬¦  «        }|                     dd| j        | j        ¬¦  «         | 	                    ¦   «          |                     d| j        dd| j        ¬ ¦  «         |                     d!| j        dd"| j        ¬ ¦  «         |                     d#| j        dd$| j        ¬ ¦  «         |                     d%| j        dd&| j        ¬ ¦  «         |                     d'| j        dd(| j        ¬ ¦  «         |                     d)d|¬¦  «         t          |d¬¦  «        }|                     d*d| j        d¬+¦  «         |                     d,d| j        dd-¬.¦  «         |                     d/d| j        dd0¬.¦  «         |                     d1d| j        d2d3¬.¦  «         |                     d4d	|¬¦  «         t          |d¬¦  «        }|                     d5d| j        ¬6¦  «         |                     d7d| j        d8¬¦  «         |                     d9d|¬¦  «         |                     |¬:¦  «         d S );Nr   )ÚtearoffzReset ParserÚDel)Úlabelr’   rc   ÚacceleratorzPrint to PostscriptzCtrl-pÚExitr   zCtrl-xÚFile)rº   r’   ÚmenuzEdit Grammarr   zCtrl-gú	Edit TextzCtrl-tÚEditr�   ÚSpacer“   zCtrl-mr‘   zCtrl-er”   zCtrl-bÚApplyúShow Grammar)rº   r’   Úvariablerc   ÚTinyr°   )rº   rÄ   r’   Úvaluerc   ÚSmallé   ÚMediumé   ÚLargeé   ÚHugeé   ÚViewzNo Animation)rº   r’   rÄ   rÆ   zSlow Animationú-)rº   r’   rÄ   rÆ   r»   zNormal Animationú=zFast Animationr>   ú+ÚAnimateÚAbout)rº   r’   rc   ÚInstructionsÚF1ÚHelp)r¾   )r   Úadd_commandr�   r‚   r{   Úadd_cascader„   r…   r€   Úadd_separatorr|   r\   r}   Úadd_checkbuttonr%   Ú_toggle_grammarÚadd_radiobuttonrA   Úresizer!   Úaboutrƒ   rm   )	r/   rr   ÚmenubarÚfilemenuÚeditmenuÚrulemenuÚviewmenuÚanimatemenuÚhelpmenus	            r3   r&   z!RecursiveDescentApp._init_menubar7  s"  € Ý�v‘,”,ˆå˜¨Ð+Ñ+Ô+ˆØ×ÒØ ¨A°t´zÈuð 	ñ 	
ô 	
ð 	
ð 	×ÒØ'ØØ”OØ ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØ A¨t¬|Èð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×ÒØ ØØÔ%Ø ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØØØÔ&Ø ð	 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜¨Ð+Ñ+Ô+ˆØ×ÒØ A¨t¬yÀgð 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×ÒØ Q°´
Èð 	ñ 	
ô 	
ð 	
ð 	×ÒØ a°´È(ð 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×ÒØ¨°D´NÐPXð 	ñ 	
ô 	
ð 	
ð 	×Ò '°Q¸XÐÑFÔFÐFå˜¨Ð+Ñ+Ô+ˆØ× Ò Ø ØØÔ'ØÔ(ð	 	!ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	× Ò ØØ”ZØØØ”Kð 	!ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEå˜7¨AÐ.Ñ.Ô.ˆØ×#Ò#Ø ¨A¸Ô8NÐVWð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø"ØØÔ+ØØð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø$ØØÔ+ØØð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø"ØØÔ+ØØð 	$ñ 	
ô 	
ð 	
ð 	×Ò )°q¸{ÐÑKÔKÐKå˜¨Ð+Ñ+Ô+ˆØ×Ò 7°aÀÄÐÑLÔLÐLØ×ÒØ ¨A°t´yÈdð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEà�Š˜7ˆÑ#Ô#Ð#Ð#Ð#r5   c                 ó–   — |D ]}|                      ¦   «         |         }Œt          |t          ¦  «        r|                     ¦   «         }|S ©N)ÚsubtreesÚ
isinstancer   rº   )r/   ÚwidgetÚtreelocÚis       r3   Ú_getzRecursiveDescentApp._get¾  sL   € Øð 	*ð 	*ˆAØ—_’_Ñ&Ô& qÔ)ˆFˆFÝ�fÕ/Ñ0Ô0ð 	$Ø—\’\‘^”^ˆFØˆr5   c                 ó„  ‡ ‡— ‰ j         Š‰ j        �‰ j                             ‰ j        ¦  «         ‰ j        D ]}‰ j                             |¦  «         Œ‰ j        �‰ j                              ‰ j        ¦  «         d‰ j                             ¦   «          f}d‰ j                             ¦   «          df}dd||dœ}‰ j	         
                    ¦   «         }t          ‰|fi |¤Ž‰ _        ‰ j                             ‰ j        dd¦  «         d‰ j                             ¦   «          f}‰ j                             ¦   «         d         x}}ˆˆ fd	„‰ j        D ¦   «         ‰ _        ‰ j        D ]z}‰ j                             |d
d
¦  «         |                     d
||                     ¦   «         d         z
  dz
  ¦  «         t#          ||                     ¦   «         d         ¦  «        }Œ{‰                     d|dz
  d|dz
  d¬¦  «        ‰ _        ‰                      ¦   «          ‰                      ¦   «          ‰                      ¦   «          d S )Nr:   r;   ú#000000r>   )Ú
tree_colorÚ
tree_widthÚ	node_fontÚ	leaf_fontr¦   r   rŠ   c                 ó>   •— g | ]}t          ‰|‰j        ¬ ¦  «        ‘ŒS )r8   )r   rE   )Ú.0Úwordr³   r/   s     €€r3   ú
<listcomp>z/RecursiveDescentApp._redraw.<locals>.<listcomp>ä  s7   ø€ ð 
ð 
ð 
Ø:>�J�v˜t¨$¬*Ð5Ñ5Ô5ð
ð 
ð 
r5   r   r   ixìÿÿiˆ  ú.)Údash)r,   r´   rš   Údestroy_widgetrµ   r¶   ÚdeleterA   rC   r   Útreer   Ú
add_widgetr™   r   ÚmoveÚbboxrn   Úcreate_lineÚ_highlight_nodesÚ_highlight_prodlistÚ_position_text)	r/   ÚtwidgetÚhelvr;   Úattribsrý   r‰   rd   r³   s	   `       @r3   r›   zRecursiveDescentApp._redrawÉ  s[  øø€ Ø”ˆð Œ:Ð!ØŒL×'Ò'¨¬
Ñ3Ô3Ð3ØÔ(ð 	1ð 	1ˆGØŒL×'Ò'¨Ñ0Ô0Ð0Ð0ØŒ>Ð%ØŒL×Ò ¤Ñ/Ô/Ð/ð ˜dœjŸnšnÑ.Ô.Ð.Ð/ˆØ˜dœjŸnšnÑ.Ô.Ð.°Ð7ˆà#ØØØð	
ð 
ˆð Œ|× Ò Ñ"Ô"ˆÝ(¨°ÐAÐA¸ÐAÐAˆŒ
ØŒ×Ò ¤
¨B°Ñ2Ô2Ð2ð ˜dœjŸnšnÑ.Ô.Ð.Ð/ˆØ”\×.Ò.Ñ0Ô0°Ô3Ð3ˆ�ð
ð 
ð 
ð 
ð 
ØBFÄ*ð
ñ 
ô 
ˆÔð Ô(ð 	*ð 	*ˆGØŒL×#Ò# G¨Q°Ñ2Ô2Ð2Ø�LŠL˜˜F W§\¢\¡^¤^°AÔ%6Ñ6¸Ñ:Ñ;Ô;Ð;Ý�A�w—|’|‘~”~ aÔ(Ñ)Ô)ˆAˆAð  ×+Ò+¨E°1°q±5¸$ÀÀAÁÈCÐ+ÑPÔPˆŒð 	×ÒÑÔÐØ× Ò Ñ"Ô"Ð"ð 	×ÒÑÔÐÐÐr5   c                 ó~   — |                       ¦   «          |                      ¦   «          |                      ¦   «          d S rè   )r  r  r  r†   s    r3   Ú_redraw_quickz!RecursiveDescentApp._redraw_quickö  s>   € à×ÒÑÔÐØ× Ò Ñ"Ô"Ð"Ø×ÒÑÔÐÐÐr5   c                 ó„  — d| j                              ¦   «          df}| j                             ¦   «         d d…         D ]>}d|                      | j        |¦  «        d<   ||                      | j        |¦  «        d<   Œ?| j                             ¦   «         dd …         D ] }d|                      | j        |¦  «        d<   Œ!d S )Nr:   r;   r   ú#20a050Úcolorr7   z#008080)rA   rC   r   Úfrontierrî   r´   )r/   r;   rì   s      r3   r  z$RecursiveDescentApp._highlight_nodesü  sË   € à˜dœjŸnšnÑ.Ô.Ð.°Ð7ˆØ”|×,Ò,Ñ.Ô.¨r°¨rÔ2ð 	:ð 	:ˆGØ6?ˆD�IŠI�d”j 'Ñ*Ô*¨7Ñ3Ø59ˆD�IŠI�d”j 'Ñ*Ô*¨6Ñ2Ð2Ø”|×,Ò,Ñ.Ô.¨q¨r¨rÔ2ð 	@ð 	@ˆGØ6?ˆD�IŠI�d”j 'Ñ*Ô*¨7Ñ3Ð3ð	@ð 	@r5   c                 ó$  — | j                              dd¦  «         | j                             ¦   «         }| j                             ¦   «         }| j        }t          t          |¦  «        ¦  «        D ]ž}||         |v rn||         |v r%| j                              |d||         z  ¦  «         n$| j                              |d||         z  ¦  «         | j          	                    |¦  «         Œz| j                              |d||         z  ¦  «         ŒŸd S )Nr   r]   ú %sz %s (TRIED))
rh   rü   r   Úexpandable_productionsÚuntried_expandable_productionsrk   Úrangero   rl   Úselection_set)r/   Ú
expandableÚuntriedrj   Úindexs        r3   r  z'RecursiveDescentApp._highlight_prodlist  s  € ð 	Œ×Ò˜a Ñ'Ô'Ð'Ø”\×8Ò8Ñ:Ô:ˆ
Ø”,×=Ò=Ñ?Ô?ˆØÔ'ˆÝ�3˜{Ñ+Ô+Ñ,Ô,ð 	Ið 	IˆEØ˜5Ô! ZÐ/Ð/Ø˜uÔ%¨Ð0Ð0Ø”N×)Ò)¨%°¸ÀUÔ9KÑ1KÑLÔLÐLÐLà”N×)Ò)¨%°ÀÈUÔASÑ1SÑTÔTÐTØ”×,Ò,¨UÑ3Ô3Ð3Ð3à”×%Ò% e¨U°[ÀÔ5GÑ-GÑHÔHÐHÐHð	Ið 	Ir5   c                 ój  — t          | j        ¦  «        }|t          | j                             ¦   «         ¦  «        z
  }|                      ¦   «         d |…         }| j                             ¦   «         d         }t          dt          |¦  «        ¦  «        D ]‡}| j        |         }||         }d|d<   d|d<   | 	                    |                     ¦   «         d         |                     ¦   «         d         z
  d¦  «         |                     ¦   «         d         dz   }Œˆt          t          |¦  «        |¦  «        D ]b}| j        |         }d|d<   | 	                    ||                     ¦   «         d         z
  d¦  «         |                     ¦   «         d         dz   }Œc| j         
                    ¦   «         r| j        D ]}d|d<   Œt          dt          |¦  «        ¦  «        D ]Ï}| j        |         }||         }|                     ¦   «         d         |                     ¦   «         d	         z
  d
z
  }	t          |	|                     ¦   «                              ¦   «                              ¦   «         d	         |                     ¦   «         d	         z
  dz   ¦  «        }	| 	                    d|	¦  «         ŒÐd S )Nr   ú#006040r  r>   r°   z#a0a0a0z#00a000r   rŠ   ç      $@)ro   r   r   Úremaining_textÚ_tree_leavesr´   r   r  rµ   rÿ   Úcurrently_completeÚmaxrr   rº   )
r/   ÚnumwordsÚnum_matchedÚleavesÚxmaxrí   rë   Úleafr  Údys
             r3   r  z"RecursiveDescentApp._position_text  sh  € å�t”z‘?”?ˆØ¥ T¤\×%@Ò%@Ñ%BÔ%BÑ!CÔ!CÑCˆØ×"Ò"Ñ$Ô$ \ k \Ô2ˆØŒz�ŠÑ Ô  Ô#ˆÝ�q�#˜f™+œ+Ñ&Ô&ð 	)ð 	)ˆAØÔ& qÔ)ˆFØ˜!”9ˆDØ'ˆF�7‰OØ%ˆD�‰MØ�KŠK˜Ÿ	š	™œ Aœ¨¯ª©¬°qÔ)9Ñ9¸1Ñ=Ô=Ð=Ø—;’;‘=”= Ô# bÑ(ˆDˆDõ •s˜6‘{”{ HÑ-Ô-ð 	)ð 	)ˆAØÔ& qÔ)ˆFØ'ˆF�7‰OØ�KŠK˜˜vŸ{š{™}œ}¨QÔ/Ñ/°Ñ3Ô3Ð3Ø—;’;‘=”= Ô# bÑ(ˆDˆDð Œ<×*Ò*Ñ,Ô,ð 	-ØÔ,ð -ð -�Ø#,�˜Ñ Ð õ �q�#˜f™+œ+Ñ&Ô&ð 	ð 	ˆAØÔ& qÔ)ˆFØ˜!”9ˆDØ—’‘”˜qÔ! D§I¢I¡K¤K°¤NÑ2°TÑ9ˆBÝ�R˜Ÿš™œ×,Ò,Ñ.Ô.×3Ò3Ñ5Ô5°aÔ8¸4¿9º9¹;¼;Àq¼>ÑIÈBÑNÑOÔOˆBØ�IŠI�a˜ÑÔÐÐð	ð 	r5   Nc                 óª   — |€| j         }t          |t          ¦  «        r3g }|                     ¦   «         D ]}||                      |¦  «        z  }Œ|S |gS rè   )r´   rê   r   ré   r  )r/   rý   r   Úchilds       r3   r  z RecursiveDescentApp._tree_leaves9  sc   € Øˆ<Ø”:ˆDÝ�dÕ-Ñ.Ô.ð 	ØˆFØŸš™œð 3ð 3�Ø˜$×+Ò+¨EÑ2Ô2Ñ2��ØˆMà�6ˆMr5   c                 óf   — d| _         | j        €d S | j                             ¦   «          d | _        d S ©Nr   )r$   r   r{   ©r/   rw   s     r3   r{   zRecursiveDescentApp.destroyH  s5   € ØˆŒØŒ9ÐØˆFØŒ	×ÒÑÔÐØˆŒ	ˆ	ˆ	r5   c                 ó¢   — d| _         | j                             | j        ¦  «         d| j        d<   d| j        d<   |                      ¦   «          d S )Nr   zReset ApplicationrO   Ú )r$   r   r+   r   r«   r¬   r›   r(  s     r3   r�   zRecursiveDescentApp.resetO  sJ   € ØˆŒØŒ×Ò ¤
Ñ+Ô+Ð+Ø"5ˆŒ˜ÑØ"$ˆŒ˜ÑØ�Š‰Œˆˆˆr5   c                 óÊ   — | j                              ¦   «         dk    r| j                              d¦  «         | j        r	d| _        d S d| _        |                      ¦   «          d S )Nr   r>   r   )r!   rC   r"   r$   Ú_stepr(  s     r3   r~   zRecursiveDescentApp.autostepV  s`   € ØÔ!×%Ò%Ñ'Ô'¨1Ò,Ð,ØÔ"×&Ò& qÑ)Ô)Ð)ØŒ>ð 	ØˆDŒNˆNˆNàˆDŒNØ�JŠJ‰LŒLˆLˆLˆLr5   c                 ó   — d| _         d S r'  )r$   r(  s     r3   r   z#RecursiveDescentApp.cancel_autostep_  s   € àˆŒˆˆr5   c                 ó<   — d| _         |                      ¦   «          d S r'  )r$   r,  r(  s     r3   r€   zRecursiveDescentApp.stepd  s   € ØˆŒØ�
Š
‰Œˆˆˆr5   c                 ó<   — d| _         |                      ¦   «          d S r'  )r$   Ú_matchr(  s     r3   r|   zRecursiveDescentApp.matchh  s   € ØˆŒØ�Š‰Œˆˆˆr5   c                 ó<   — d| _         |                      ¦   «          d S r'  )r$   Ú_expandr(  s     r3   r\   zRecursiveDescentApp.expandl  s   € ØˆŒØ�Š‰Œˆˆˆr5   c                 ó<   — d| _         |                      ¦   «          d S r'  )r$   Ú
_backtrackr(  s     r3   r}   zRecursiveDescentApp.backtrackp  s   € ØˆŒØ�ŠÑÔÐÐÐr5   c                 ól  — | j         rd S |                      ¦   «         rn^| j                             ¦   «         r|                      ¦   «         rn0|                      ¦   «         rnd| j        d<   d| j        d<   d| _        | j         	                    ¦   «         rd| _        | j        dxx         dz  cc<   d S d S )NÚFinishedrO   r*  r   z    [COMPLETE PARSE])
r#   r2  r   Úuntried_matchr0  r4  r«   r¬   r$   r  r†   s    r3   r,  zRecursiveDescentApp._stept  sÑ   € ØÔð 	ØˆFð �<Š<‰>Œ>ð 		ØØŒ\×'Ò'Ñ)Ô)ð 	¨d¯kªk©m¬mð 	ØØ�_Š_ÑÔð 	Øà&0ˆDŒO˜FÑ#Ø&(ˆDŒO˜FÑ#ØˆDŒNð Œ<×*Ò*Ñ,Ô,ð 	>ØˆDŒNØŒO˜FÐ#Ð#Ô#Ð'=Ñ=Ð#Ð#Ñ#Ð#Ð#ð	>ð 	>r5   c                 ó¨  — | j         rd S | j                             ¦   «         }| j                             ¦   «         }|�€d| j        d<   || j        d<   | j                             dd¦  «         | j         	                    |¦  «        }| j         
                    |¦  «         |                      |d         ¦  «         dS d| j        d<   d| j        d<   dS )NúExpand:rO   r   r]   Tz(all expansions tried)F)r#   r   r  r\   r«   r¬   rh   Úselection_clearrk   r  r  Ú_animate_expand)r/   rw   Úold_frontierÚrvr  s        r3   r2  zRecursiveDescentApp._expand‰  sÓ   € ØÔð 	ØˆFØ”|×,Ò,Ñ.Ô.ˆØŒ\× Ò Ñ"Ô"ˆØˆ>Ø&/ˆDŒO˜FÑ#Ø&(ˆDŒO˜FÑ#ØŒN×*Ò*¨1¨eÑ4Ô4Ð4ØÔ%×+Ò+¨BÑ/Ô/ˆEØŒN×(Ò(¨Ñ/Ô/Ð/Ø× Ò  ¨a¤Ñ1Ô1Ð1Ø�4à&/ˆDŒO˜FÑ#Ø&>ˆDŒO˜FÑ#Ø�5r5   c                 ó
  — | j         rd S | j                             ¦   «         }| j                             ¦   «         }|�1d| j        d<   || j        d<   |                      |d         ¦  «         dS d| j        d<   d| j        d<   dS )NzMatch:rO   r   Tz(failed)F)r#   r   r  r|   r«   r¬   Ú_animate_match)r/   rw   r<  r=  s       r3   r0  zRecursiveDescentApp._match›  s�   € ØÔð 	ØˆFØ”|×,Ò,Ñ.Ô.ˆØŒ\×ÒÑ!Ô!ˆØˆ>Ø&.ˆDŒO˜FÑ#Ø&(ˆDŒO˜FÑ#Ø×Ò ¨Q¤Ñ0Ô0Ð0Ø�4à&.ˆDŒO˜FÑ#Ø&0ˆDŒO˜FÑ#Ø�5r5   c                 ó&  — | j         rd S | j                             ¦   «         rÓ| j                             ¦   «         }| j                             ¦   «         d         D ]
}||         }Œd| j        d<   d| j        d<   t          |t          ¦  «        r3|  	                    | j                             ¦   «         d         ¦  «         n2|  
                    | j                             ¦   «         d         ¦  «         dS d| _        d| j        d<   d| j        d<   dS )Nr   r”   rO   r*  Tr6  F)r#   r   r}   rý   r  r«   r¬   rê   r   Ú_animate_backtrackÚ_animate_match_backtrackr$   )r/   rw   Úeltrí   s       r3   r4  zRecursiveDescentApp._backtrackª  s  € ØÔð 	ØˆFØŒ<×!Ò!Ñ#Ô#ð 	Ø”,×#Ò#Ñ%Ô%ˆCØ”\×*Ò*Ñ,Ô,¨QÔ/ð ð �Ø˜!”f��Ø&1ˆDŒO˜FÑ#Ø&(ˆDŒO˜FÑ#Ý˜#�tÑ$Ô$ð JØ×'Ò'¨¬×(=Ò(=Ñ(?Ô(?ÀÔ(BÑCÔCÐCÐCà×-Ò-¨d¬l×.CÒ.CÑ.EÔ.EÀaÔ.HÑIÔIÐIØ�4àˆDŒNØ&0ˆDŒO˜FÑ#Ø&(ˆDŒO˜FÑ#Ø�5r5   c                 ó–   — d}d}	 ddl m}  |||¬¦  «                             ¦   «          d S #  t          | j        ||¦  «         Y d S xY w)NzANLTK Recursive Descent Parser Application
Written by Edward Loperz+About: Recursive Descent Parser Applicationr   )ÚMessage)Úmessager   )Útkinter.messageboxrE  Úshowr   r   )r/   rw   ÚABOUTÚTITLErE  s        r3   rß   zRecursiveDescentApp.about¾  su   € àUð 	ð >ˆð	.Ø2Ð2Ð2Ð2Ð2Ð2àˆG˜E¨Ð/Ñ/Ô/×4Ò4Ñ6Ô6Ð6Ð6Ð6øð	.Ý�T”Y  uÑ-Ô-Ð-Ð-Ð-Ð-øøøs	   †%- ­Ac                 óì   — d| _         	 t          | j        dt          pd                     ¦   «         dd¬¦  «         d S #  t          | j        dt          pd                     ¦   «         d¬¦  «         Y d S xY w)Nr   z*Help: Recursive Descent Parser Applicationr*  éK   Úfixed)r¨   r7   )r¨   )r$   r   r   Ú__doc__Ústripr(  s     r3   rƒ   zRecursiveDescentApp.helpÊ  s�   € ØˆŒð	ÝØ”	Ø<Ý�˜B×%Ò%Ñ'Ô'ØØðñ ô ð ð ð øð	ÝØ”	Ø<Ý�˜B×%Ò%Ñ'Ô'Øð	ñ ô ð ð ð ð øøøs	   ‰2= ½3A3c                 óF   — d| _         | j                             ¦   «          d S r'  )r$   rš   Úprint_to_filer(  s     r3   r‚   zRecursiveDescentApp.postscriptÝ  s#   € ØˆŒØŒ×"Ò"Ñ$Ô$Ð$Ð$Ð$r5   c                 óJ   — t          ¦   «         rdS  | j        j        |i |¤Ž dS )zñ
        Enter the Tkinter mainloop.  This function must be called if
        this demo is created from a non-interactive program (e.g.
        from a secript); otherwise, the demo will close as soon as
        the script completes.
        N)r   r   Úmainloop)r/   ÚargsÚkwargss      r3   rS  zRecursiveDescentApp.mainloopá  s5   € õ ‰9Œ9ð 	ØˆFØˆŒ	Ô˜DÐ+ FÐ+Ð+Ð+Ð+Ð+r5   c                 óæ  — |�| j                              |¦  «         | j                              ¦   «         }| j                             t          |¦  «         ¬¦  «         | j                             t          |¦  «         ¬¦  «         | j                             t          |¦  «         ¬¦  «         | j                             t          |dz   ¦  «         ¬¦  «         |  	                    ¦   «          d S )N)r9   r>   )
rA   r"   rC   rE   Ú	configureÚabsrD   r?   rF   r›   )r/   r9   s     r3   rÞ   zRecursiveDescentApp.resizeì  sÇ   € ØÐØŒJ�NŠN˜4Ñ Ô Ð ØŒz�~Š~ÑÔˆØŒ
×Ò¥C¨¡I¤I ,ÐÑ/Ô/Ð/ØŒ× Ò ­¨D©	¬	 lÐ Ñ3Ô3Ð3ØŒ×Ò¥s¨4¡y¤y \ÐÑ2Ô2Ð2ØŒ×Ò¥s¨4°!©8¡}¤}Ð%5ÐÑ6Ô6Ð6Ø�Š‰Œˆˆˆr5   c                 óî   — | j                              ¦   «         r.| j                             ddd| j        ¬¦  «         d| j        d<   n#| j                             ¦   «          d| j        d<   d| j        d<   d S )	NrJ   rK   r>   )rL   rM   rN   ÚafterrÃ   rO   zHide Grammarr*  )r%   rC   re   rf   r©   r«   Úpack_forgetr¬   r(  s     r3   rÜ   z#RecursiveDescentApp._toggle_grammarú  s‡   € ØÔ×!Ò!Ñ#Ô#ð 	5ØŒO× Ò Ø &¨q¸Ô8Kð !ñ ô ð ð '5ˆDŒO˜FÑ#Ð#àŒO×'Ò'Ñ)Ô)Ð)Ø&4ˆDŒO˜FÑ#Ø"$ˆŒ˜ÑÐÐr5   c                 ó®  — | j                              ¦   «         }t          |¦  «        dk    rd S t          |d         ¦  «        }| j                             ¦   «         }| j                             | j        |         ¦  «        }|rfd| j        d<   || j	        d<   | j          
                    dd¦  «         | j                              |¦  «         |                      |d         ¦  «         d S | j          
                    dd¦  «         | j                             ¦   «         D ]6}| j                             |¦  «        }| j                              |¦  «         Œ7d S )Nr   r   r9  rO   r]   )rh   Úcurselectionro   Úintr   r  r\   rk   r«   r¬   r:  r  r;  r  r  )r/   rœ   Ú	selectionr  r<  rt   Úprods          r3   rq   z$RecursiveDescentApp._prodlist_select  sH  € Ø”N×/Ò/Ñ1Ô1ˆ	Ýˆy‰>Œ>˜QÒÐØˆFÝ�I˜a”LÑ!Ô!ˆØ”|×,Ò,Ñ.Ô.ˆØ”\×(Ò(¨Ô):¸5Ô)AÑBÔBˆ
àð 	4Ø&/ˆDŒO˜FÑ#Ø&0ˆDŒO˜FÑ#ØŒN×*Ò*¨1¨eÑ4Ô4Ð4ØŒN×(Ò(¨Ñ/Ô/Ð/Ø× Ò  ¨a¤Ñ1Ô1Ð1Ð1Ð1ð ŒN×*Ò*¨1¨eÑ4Ô4Ð4Øœ×;Ò;Ñ=Ô=ð 4ð 4�ØÔ)×/Ò/°Ñ5Ô5�Ø”×,Ò,¨UÑ3Ô3Ð3Ð3ð4ð 4r5   c           
      ó€  ‡ — ‰                       ‰ j        |¦  «        }|                     ¦   «         }t          |                     ¦   «         t          ¦  «         }‰ j                             ¦   «         }|D ]
}||         }Œt          ‰ j        |‰ j	        dddd‰ j
        ¬¦  «        }d|                     ¦   «         d<   |                     ¦   «                              ¦   «         d d…         \  }}	|                     ¦   «                              ¦   «         d d…         \  }
}|                     ||
z
  |	|z
  ¦  «         |rg‰ j                             |dd¦  «         |                     d|                     ¦   «                              ¦   «         d         z
  d¦  «         |‰ _        n(|                     ¦   «                              ||¦  «         |                     ¦   «         rÅ||                     ¦   «                              ¦   «         dz  z   |                     ¦   «         d                              ¦   «         d         dz  z
  |                     ¦   «         d                              ¦   «         d         dz  z
  }|                     ¦   «         D ]}|                     |d¦  «         Œ‰                      |¦  «         |r‰ j                             |¦  «         n|                     ¦   «          ˆ fd	„t-          ‰ j                             ¦   «         dd
¦  «        D ¦   «         }|                     ¦   «         d         dz   ‰ j                             ‰ j        ¦  «        d         z
  }|dk    rA‰ j        D ]}|                     d|¦  «         Œ‰ j                             ‰ j        d|¦  «         ‰                      ||¦  «         d S )NrR   r>   )ró   Ú
leaf_colorrò   rñ   Ú
node_colorrô   r  r  r   r   r¦   c           	      ót   •— g | ]4}d dt          d|z  ‰j                             ¦   «         z  ¦  «        z  z  ‘Œ5S ©zgray%dr°   ©r^  r!   rC   ©rö   r¢   r/   s     €r3   rø   z7RecursiveDescentApp._animate_expand.<locals>.<listcomp>\  sS   ø€ ð 
ð 
ð 
àð ˜�S  a¡¨$Ô*@×*DÒ*DÑ*FÔ*FÑ!FÑGÔGÑGÑHð
ð 
ð 
r5   éÿÿÿÿrŠ   r   )rî   r´   rr   rê   r   r   rý   r   r,   rD   rE   rº   r   rÿ   rš   rþ   Úreplace_childré   r¨   Ú	_makeroomrû   r{   r  r!   rC   Úcoordsr¶   rµ   Ú_animate_expand_frame)r/   rì   Ú	oldwidgetÚoldtreer²   rý   rí   rë   ÚoldxÚoldyÚnewxÚnewyÚdxÚsubtreeÚcolorsr#  r  s   `                r3   r;  z#RecursiveDescentApp._animate_expand)  sŽ  ø€ Ø—I’I˜dœj¨'Ñ2Ô2ˆ	Ø×"Ò"Ñ$Ô$ˆÝ˜WŸ^š^Ñ-Ô-Õ/@ÑAÔAÐAˆàŒ|× Ò Ñ"Ô"ˆØð 	ð 	ˆAØ˜”7ˆDˆDå$ØŒLØØ”nØØØØØ”jð	
ñ 	
ô 	
ˆð #,ˆ�Š‰Œ�wÑà—}’}‘”×+Ò+Ñ-Ô-¨b¨q¨bÔ1‰ˆˆtØ—|’|‘~”~×*Ò*Ñ,Ô,¨R¨a¨RÔ0‰ˆˆtØ�Š�D˜4‘K ¨¡Ñ-Ô-Ð-àð 	<ØŒL×#Ò# F¨A¨qÑ1Ô1Ð1Ø�KŠK˜˜VŸ\š\™^œ^×0Ò0Ñ2Ô2°1Ô5Ñ5°qÑ9Ô9Ð9ØˆDŒJˆJà�NŠNÑÔ×*Ò*¨7°FÑ;Ô;Ð;ð �?Š?ÑÔð 	$àØ—,’,‘.”.×&Ò&Ñ(Ô(¨1Ñ,ñ-à—/’/Ñ#Ô# AÔ&×+Ò+Ñ-Ô-¨aÔ0°1Ñ4ñ5ð —/’/Ñ#Ô# AÔ&×+Ò+Ñ-Ô-¨aÔ0°1Ñ4ñ5ð ð "Ÿ?š?Ñ,Ô,ð $ð $�Ø—’˜R Ñ#Ô#Ð#Ð#à�Š�vÑÔÐàð 	ØŒL×'Ò'¨Ñ0Ô0Ð0Ð0à�OŠOÑÔÐð
ð 
ð 
ð 
å˜4Ô1×5Ò5Ñ7Ô7¸¸BÑ?Ô?ð
ñ 
ô 
ˆð �[Š[‰]Œ]˜1Ô Ñ" T¤\×%8Ò%8¸¼Ñ%HÔ%HÈÔ%KÑKˆØ�Š6ˆ6ØÔ,ð $ð $�Ø—’˜Q Ñ#Ô#Ð#Ð#ØŒL×Ò˜dœn¨a°Ñ4Ô4Ð4à×"Ò" 6¨6Ñ2Ô2Ð2Ð2Ð2r5   c                 óÆ  — |                      ¦   «         }t          |t          ¦  «        sdS |                     ¦   «                              |¦  «        }|                     ¦   «         |dz   d…         }|rY|                     ¦   «         d         |d                              ¦   «         d         z
  dz   }|D ]}|                     |d¦  «         Œ|dk    ry|                     ¦   «         |dz
           }t          d|                     ¦   «         d         |                     ¦   «         d         z
  dz   ¦  «        }|                     |d¦  «         |                      |¦  «         dS )z@
        Make sure that no sibling tree bbox's overlap.
        Nr   r>   r   r°   )	rr   rê   r   ré   r  r   rÿ   r  rj  )r/   Útreesegrr   r  Ú	rsiblingsrs  ÚsiblingÚlsiblings           r3   rj  zRecursiveDescentApp._makeroomj  sI  € ð —’Ñ!Ô!ˆÝ˜&Õ"3Ñ4Ô4ð 	ØˆFà—’Ñ!Ô!×'Ò'¨Ñ0Ô0ˆð —O’OÑ%Ô% e¨a¡i k kÔ2ˆ	Øð 	$Ø—’‘” Ô" Y¨q¤\×%6Ò%6Ñ%8Ô%8¸Ô%;Ñ;¸bÑ@ˆBØ$ð $ð $�Ø—’˜R Ñ#Ô#Ð#Ð#ð �1Š9ˆ9Ø—’Ñ(Ô(¨°©Ô3ˆHÝ�Q˜Ÿš™œ¨Ô*¨W¯\ª\©^¬^¸AÔ->Ñ>ÀÑCÑDÔDˆBØ�LŠL˜˜QÑÔÐð 	�Š�vÑÔÐÐÐr5   c                 óŒ  — t          |¦  «        dk    r“d| _        |d         |d<   |                     ¦   «         D ]@}t          |t          ¦  «        r|d         |                     ¦   «         d<   Œ5|d         |d<   ŒA| j                             d| j        ||dd …         ¦  «         d S d|d<   |                     ¦   «         D ]4}t          |t          ¦  «        rd|                     ¦   «         d<   Œ/d|d<   Œ5|  	                    ¦   «          d|                     ¦   «         d<   d| _        | j
        r|                      ¦   «          d S d S )Nr   r   r  é2   rŽ   )ro   r#   ré   rê   r   rº   r   rZ  rl  r	  r$   r,  )r/   rë   ru  rt  s       r3   rl  z)RecursiveDescentApp._animate_expand_frame„  sO  € Ýˆv‰;Œ;˜Š?ˆ?Ø#$ˆDÔ Ø$ QœiˆF�7‰OØ!Ÿ?š?Ñ,Ô,ð 1ð 1�Ý˜gÕ'8Ñ9Ô9ð 1Ø/5°a¬y�G—M’M‘O”O GÑ,Ð,à'-¨a¤y�G˜GÑ$Ð$ØŒI�OŠO˜B Ô :¸FÀFÈ1È2È2ÄJÑOÔOÐOÐOÐOà%ˆF�7‰OØ!Ÿ?š?Ñ,Ô,ð /ð /�Ý˜gÕ'8Ñ9Ô9ð /Ø/6�G—M’M‘O”O GÑ,Ð,à'.�G˜GÑ$Ð$Ø×ÒÑ Ô Ð Ø&-ˆF�LŠL‰NŒN˜7Ñ#Ø#$ˆDÔ ØŒ~ð Ø—
’
‘”���ðð r5   c                 ó(  ‡ — ‰ j                              ¦   «         dk    rg }ng d¢}|ˆ fd„t          d‰ j                              ¦   «         dz   ¦  «        D ¦   «         z  }‰                      ‰ j        |¦  «                             ¦   «         g}|d                              ¦   «         D ]T}t          |t          ¦  «        r(| 	                    | 
                    ¦   «         ¦  «         Œ?| 	                    |¦  «         ŒU‰                      ||¦  «         d S )Nr   )ú#a00000rð   r~  c           	      ót   •— g | ]4}d dt          d|z  ‰j                             ¦   «         z  ¦  «        z  z  ‘Œ5S re  rf  rg  s     €r3   rø   z:RecursiveDescentApp._animate_backtrack.<locals>.<listcomp>¡  sS   ø€ ð 
ð 
ð 
àð ˜�S  a¡¨4Ô+A×+EÒ+EÑ+GÔ+GÑ!HÑIÔIÑIÑJð
ð 
ð 
r5   r   )r!   rC   r  rî   r´   rr   ré   rê   r   Úappendrº   Ú_animate_backtrack_frame)r/   rì   ru  Úwidgetsrt  s   `    r3   rA  z&RecursiveDescentApp._animate_backtrack›  s#  ø€ àÔ!×%Ò%Ñ'Ô'¨1Ò,Ð,ØˆFˆFà6Ð6Ð6ˆFØð 
ð 
ð 
ð 
å˜1˜dÔ4×8Ò8Ñ:Ô:¸QÑ>Ñ?Ô?ð
ñ 
ô 
ñ 	
ˆð
 —9’9˜TœZ¨Ñ1Ô1×8Ò8Ñ:Ô:Ð;ˆØ˜q”z×*Ò*Ñ,Ô,ð 	(ð 	(ˆGÝ˜'Õ#4Ñ5Ô5ð (Ø—’˜wŸ}š}™œÑ/Ô/Ð/Ð/à—’˜wÑ'Ô'Ð'Ð'à×%Ò% g¨vÑ6Ô6Ð6Ð6Ð6r5   c                 óº  — t          |¦  «        dk    rCd| _        |D ]}|d         |d<   Œ| j                             d| j        ||dd …         ¦  «         d S |d                              ¦   «         D ]1}|d                              |¦  «         |                     ¦   «          Œ2|                      ¦   «          d| _        | j	        r|  
                    ¦   «          d S d S )Nr   r   r  r|  )ro   r#   r   rZ  r�  ré   Úremove_childr{   r	  r$   r,  )r/   r‚  ru  rë   s       r3   r�  z,RecursiveDescentApp._animate_backtrack_frame¯  së   € Ýˆv‰;Œ;˜Š?ˆ?Ø#$ˆDÔ Ø!ð ,ð ,�Ø"(¨¤)��w‘�ØŒI�OŠO˜B Ô =¸wÈÈqÈrÈrÌ
ÑSÔSÐSÐSÐSà! !œ*×-Ò-Ñ/Ô/ð !ð !�Ø˜”
×'Ò'¨Ñ/Ô/Ð/Ø—’Ñ Ô Ð Ð Ø×ÒÑ Ô Ð Ø#$ˆDÔ ØŒ~ð Ø—
’
‘”���ðð r5   c                 ó¤  — |                       | j        |¦  «        }|                     ¦   «                              ¦   «         }|                     ¦   «         d         |                     ¦   «         d         z
  dz   t          d| j                             ¦   «         ¦  «        z  }|                      | j                             ¦   «         ||¦  «         d S )NrŠ   r   rÊ   )	rî   r´   rr   rº   r   r  r!   rC   Ú_animate_match_backtrack_frame)r/   rì   rë   Únoder#  s        r3   rB  z,RecursiveDescentApp._animate_match_backtrack¾  s­   € Ø—’˜4œ: wÑ/Ô/ˆØ�}Š}‰Œ×$Ò$Ñ&Ô&ˆØ�iŠi‰kŒk˜!Œn˜vŸ{š{™}œ}¨QÔ/Ñ/°"Ñ4½ØˆtÔ%×)Ò)Ñ+Ô+ñ9
ô 9
ñ 
ˆð 	×+Ò+¨DÔ,B×,FÒ,FÑ,HÔ,HÈ&ÐRTÑUÔUÐUÐUÐUr5   c                 ón  — |                       | j        |¦  «        }| j        d                              ¦   «         d         |                     ¦   «         d         z
  dz
  t	          d| j                             ¦   «         ¦  «        z  }|                      | j                             ¦   «         ||¦  «         d S )Nr   r   rŠ   r  )rî   r´   rµ   r   r  r!   rC   Ú_animate_match_frame)r/   rì   rë   r#  s       r3   r?  z"RecursiveDescentApp._animate_matchÆ  s¢   € Ø—’˜4œ: wÑ/Ô/ˆàÔ Ô"×'Ò'Ñ)Ô)¨!Ô,¨v¯{ª{©}¬}¸QÔ/?Ñ?À$ÑFÍ#ØˆtÔ%×)Ò)Ñ+Ô+ñK
ô K
ñ 
ˆð 	×!Ò! $Ô"8×"<Ò"<Ñ">Ô">ÀÈÑKÔKÐKÐKÐKr5   c                 ó  — |dk    rEd| _         |                     d|¦  «         | j                             d| j        |dz
  ||¦  «         d S d|d<   |                      ¦   «          d| _         | j        r|                      ¦   «          d S d S )Nr   r   r°   r  r  )r#   rÿ   r   rZ  r‰  r	  r$   r,  ©r/   Úframerë   r#  s       r3   r‰  z(RecursiveDescentApp._animate_match_frameÎ  s˜   € Ø�1Š9ˆ9Ø#$ˆDÔ Ø�KŠK˜˜2ÑÔÐØŒI�OŠO˜B Ô 9¸5À1¹9ÀfÈbÑQÔQÐQÐQÐQà'ˆF�7‰OØ×ÒÑ Ô Ð Ø#$ˆDÔ ØŒ~ð Ø—
’
‘”���ðð r5   c                 óZ  — |dk    rEd| _         |                     d|¦  «         | j                             d| j        |dz
  ||¦  «         d S |                     ¦   «                              |¦  «         |                     ¦   «          d| _         | j        r|  	                    ¦   «          d S d S )Nr   r   r°   )
r#   rÿ   r   rZ  r†  rr   r„  r{   r$   r,  r‹  s       r3   r†  z2RecursiveDescentApp._animate_match_backtrack_frameÚ  s¶   € Ø�1Š9ˆ9Ø#$ˆDÔ Ø�KŠK˜˜2ÑÔÐØŒI�OŠOØ�DÔ7¸À¹ÀFÈBñô ð ð ð ð �MŠM‰OŒO×(Ò(¨Ñ0Ô0Ð0Ø�NŠNÑÔÐØ#$ˆDÔ ØŒ~ð Ø—
’
‘”���ðð r5   c                 ój   — t          | j        | j                             ¦   «         | j        ¦  «         d S rè   )r   r   r   r0   Úset_grammarr(  s     r3   r„   z RecursiveDescentApp.edit_grammarè  s-   € Ý�$”)˜Tœ\×1Ò1Ñ3Ô3°TÔ5EÑFÔFÐFÐFÐFr5   c                 ó  — | j                              |¦  «         t          |                     ¦   «         ¦  «        | _        | j                             dd¦  «         | j        D ] }| j                             dd|z  ¦  «         Œ!d S )Nr   r]   r  )r   r�  ri   rj   rk   rh   rü   rl   )r/   r0   rt   s      r3   r�  zRecursiveDescentApp.set_grammarë  sˆ   € ØŒ× Ò  Ñ)Ô)Ð)Ý  ×!4Ò!4Ñ!6Ô!6Ñ7Ô7ˆÔØŒ×Ò˜a Ñ'Ô'Ð'ØÔ+ð 	?ð 	?ˆJØŒN×!Ò! %¨%°*Ñ*<Ñ>Ô>Ð>Ð>ð	?ð 	?r5   c                 ó|   — d                      | j        ¦  «        }d}d}t          | j        ||| j        |¦  «         d S )Nú r¿   zEnter a new sentence to parse.)Újoinr   r   r   Úset_sentence)r/   rw   Úsentencer   Úinstrs        r3   r…   z!RecursiveDescentApp.edit_sentenceò  s@   € Ø—8’8˜DœJÑ'Ô'ˆØˆØ0ˆÝ�D”I˜x¨°Ô0AÀ5ÑIÔIÐIÐIÐIr5   c                 ó`   — |                      ¦   «         | _        |                      ¦   «          d S rè   )Úsplitr   r�   )r/   r•  s     r3   r”  z RecursiveDescentApp.set_sentenceø  s$   € Ø—^’^Ñ%Ô%ˆŒ
Ø�
Š
‰Œˆˆˆr5   )r   rè   )4Ú__name__Ú
__module__Ú__qualname__rN  r4   r    r)   r   r'   r.   r(   r*   r&   rî   r›   r	  r  r  r  r  r{   r�   r~   r   r€   r|   r\   r}   r,  r2  r0  r4  rß   rƒ   r‚   rS  rÞ   rÜ   rq   r;  rj  rl  rA  r�  rB  r?  r‰  r†  r„   r�  r…   r”  © r5   r3   r   r   M   s   € € € € € ðð ð$:ð $:ð $:ð $:ðTJð Jð Jð""Hð "Hð "HðH:ð :ð :ðB)ð )ð )ð`ð ð ð>ð >ð >ð.ð ð ð"A$ð A$ð A$ðNð ð ð+ð +ð +ðZð ð ð@ð @ð @ðIð Ið Ið$ ð  ð  ðD	ð 	ð 	ð 	ðð ð ðð ð ðð ð ðð ð ð
ð ð ðð ð ðð ð ðð ð ð>ð >ð >ð*ð ð ð$ð ð ðð ð ð(
.ð 
.ð 
.ðð ð ð&%ð %ð %ð	,ð 	,ð 	,ðð ð ð ð	%ð 	%ð 	%ð,4ð 4ð 4ð2?3ð ?3ð ?3ðBð ð ð4ð ð ð.7ð 7ð 7ð(ð ð ðVð Vð VðLð Lð Lð
ð 
ð 
ðð ð ðGð Gð Gð?ð ?ð ?ðJð Jð Jðð ð ð ð r5   r   c                  ó¨   — ddl m}  |                      d¦  «        }d                     ¦   «         }t	          ||¦  «                             ¦   «          dS )zV
    Create a recursive descent parser demo, using a simple grammar and
    text.
    r   )ÚCFGaD  
    # Grammatical productions.
        S -> NP VP
        NP -> Det N PP | Det N
        VP -> V NP PP | V NP | V
        PP -> P NP
    # Lexical productions.
        NP -> 'I'
        Det -> 'the' | 'a'
        N -> 'man' | 'park' | 'dog' | 'telescope'
        V -> 'ate' | 'saw'
        P -> 'in' | 'under' | 'with'
    zthe dog saw a man in the parkN)Únltk.grammarrž  Ú
fromstringr˜  r   rS  )rž  r0   r1   s      r3   Úappr¡  ý  sc   € ð
 !Ð Ð Ð Ð Ð à�nŠnð	ñô €Gð  +×0Ò0Ñ2Ô2€Då˜ Ñ&Ô&×/Ò/Ñ1Ô1Ð1Ð1Ð1r5   Ú__main__r¡  N)rN  Útkinterr   r   r   r   r   r   r	   r
   Útkinter.fontr   Ú	nltk.drawr   r   r   Únltk.draw.utilr   r   r   r   Ú
nltk.parser   Ú	nltk.treer   Ú	nltk.utilr   r   r¡  r™  Ú__all__rœ  r5   r3   ú<module>r«     s<  ðð9ð 9ðv OÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ Ð Ð Ð Ð Ð à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðmð mð mð mð mñ mô mð mð`2ð 2ð 2ð8 ˆzÒÐØ€C�E„E€Eàˆ'€€€r5   