Ë
    çÍ:j��  ã                   óÄ   — 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y)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                   ó6  — e Zd ZdZd3d„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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!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/„ Z0d0„ Z1d1„ Z2d2„ Z3y)5Ú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.
    c                 ór  — || _         t        ||«      | _        t        «       | _        | j                  j                  d«       | j                  «        | j                  | j                  «       t        | j                  «      | _	        | j                  j                  d«       d| _        d| _        t        | j                  «      | _        | j                  j                  d«       | j                  | j                  «       | j                  | j                  «       | j!                  | j                  «       | j#                  | j                  «       | j%                  | j                  «       | j                  j'                  | j                   «       | j(                  j+                  d| j,                  «       y )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       új/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/app/rdparser_app.pyÚ__init__zRecursiveDescentApp.__init__X   s@  € ØˆŒ
Ü5°g¸uÓEˆŒô “DˆŒ	Ø�	‰	�‰Ð>Ô?ð 	×ÑÔð 	×Ñ˜Ÿ™Ô#ô "(¨¯	©	Ó!2ˆÔØ×Ñ×"Ñ" 1Ô%Ø ˆÔØˆŒô $ D§I¡IÓ.ˆÔØ×Ñ×Ñ˜qÔ!ð 	×Ñ˜4Ÿ9™9Ô%Ø×Ñ˜4Ÿ9™9Ô%Ø×Ñ˜DŸI™IÔ&Ø×Ñ˜4Ÿ9™9Ô%Ø×Ñ˜$Ÿ)™)Ô$ð 	�‰×Ñ §
¡
Ô+ð 	�‰×Ñ˜-¨¯©Õ9ó    c                 ó|  — t        t        «       d   ¬«      | _        |j                  d| j                  «       t	        |«      | _        | j
                  j                  | j                  j                  d«      «       t        dd| j
                  j                  «       ¬«      | _	        t        d| j
                  j                  «       ¬«      | _
        | j
                  j                  «       d	k  r| j
                  j                  «       d
z
  }n| j
                  j                  «       d
z   }t        dd|¬«      | _        y )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ˆŒØ�‰˜ §¡Ô/ô ˜D“\ˆŒ
Ø�
‰
�‰�t—}‘}×)Ñ)¨&Ó1Ô2ä [¸ÀdÇjÁjÇnÁnÓFVÔWˆŒÜ °4·:±:·>±>Ó3CÔDˆŒ
Ø�:‰:�>‰>Ó˜aÒØ—*‘*—.‘.Ó" QÑ&‰Cà—*‘*—.‘.Ó" QÑ&ˆCÜ K¸ÀSÔIˆ�r5   c           
      ó   — t        |«      x| _        }| j                  j                  ddd¬«       t        | j                  | j                  d¬«      | _        | j
                  j                  «        t        | j                  ddd	d
| j                  dd¬«      | _        | j                  j                  ddd¬«       t        | j                  j                  «       j                  «       «      | _        | j                  D ]!  }| j                  j                  dd|z  «       Œ# | j                  j                  t!        t#        | j                  «      d«      ¬«       t#        | j                  «      dkD  rvt%        | j                  d¬«      }| j                  j                  |j&                  ¬«       |j                  | j                  j(                  ¬«       |j                  dd¬«       | j                  j+                  d| j,                  «       y )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Ð3ˆŒ˜)Ø�‰×Ñ &¨v¸AÐÔ>Ü$Ø�O‰O $§.¡.Ð7Mô 
ˆÔð 	×Ñ×!Ñ!Ô#Ü Ø�O‰OØØØØ Ø—‘Ø&Ø&ô	
ˆŒð 	�‰×Ñ ¨v¸aÐÔ@ä  §¡×!5Ñ!5Ó!7×!CÑ!CÓ!EÓFˆÔØ×+Ñ+ò 	@ˆJØ�N‰N×!Ñ! %¨&°:Ñ*=Õ?ð	@à�‰×Ñ¤S¬¨T×->Ñ->Ó)?ÀÓ%DÐÔEô ˆt× Ñ Ó! BÒ&Ü" 4§?¡?¸:ÔFˆJØ�N‰N×!Ñ!°·±Ð!Ô@Ø×Ñ d§n¡n×&:Ñ&:ÐÔ;Ø�O‰O ¨cˆOÔ2ð 	�‰×ÑÐ/°×1FÑ1FÕGr5   c                 óŒ  — | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j
                  «       | j                   j                  d	| j
                  «       | j                   j                  d
| j
                  «       | j                   j                  d| j
                  «       | j                   j                  d| j
                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       | j                   j                  d| j                  «       y )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¡lÔ3Ø�	‰	�‰�} d§l¡lÔ3Ø�	‰	�‰�z 4§<¡<Ô0Ø�	‰	�‰�s˜DŸK™KÔ(ð 	�	‰	�‰�s˜DŸJ™JÔ'Ø�	‰	�‰�y $§*¡*Ô-Ø�	‰	�‰�} d§j¡jÔ1Ø�	‰	�‰�s˜DŸN™NÔ+Ø�	‰	�‰�y $§.¡.Ô1Ø�	‰	�‰�} d§n¡nÔ5Ø�	‰	�‰�} d§n¡nÔ5Ø�	‰	�‰�} d§n¡nÔ5Ø�	‰	�‰�s˜DŸM™MÔ*à�	‰	�‰Ð(¨$¯-©-Ô8Ø�	‰	�‰�} d×&:Ñ&:Ô;Ø�	‰	�‰�y $§)¡)Ô,Ø�	‰	�‰�z 4§:¡:Ô.Ø�	‰	�‰�} d§o¡oÔ6ð 	�	‰	�‰�} d§i¡iÔ0Ø�	‰	�‰�v˜tŸy™yÔ)ð 	�	‰	�‰�} d×&7Ñ&7Ô8Ø�	‰	�‰�} d×&8Ñ&8Õ9r5   c                 óü  — t        |«      x| _        }|j                  dddd¬«       t        |ddd| j                  ¬	«      j                  d
¬«       t        |ddd| j
                  ¬	«      j                  d
¬«       t        |dddd| j                  ¬«      j                  d
¬«       t        |dddd| j                  ¬«      j                  d
¬«       t        |dddd| j                  ¬«      j                  d
¬«       y )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Ø   s   € ä*/°«-Ð7ˆÔ˜KØ×Ñ˜f¨8¸!À!ÐÔDÜØØØ ØØ—I‘Iô	
÷ ‰$�Fˆ$Ô
ÜØØØ ØØ—M‘Mô	
÷ ‰$�Fˆ$Ô
ÜØØØØ ØØ—K‘Kô	
÷ ‰$�Fˆ$Ô
ÜØØØØ ØØ—J‘Jô	
÷ ‰$�Fˆ$Ô
ÜØØØØ ØØ—N‘Nô	
÷ ‰$�Fˆ$Õ
r5   c                 óº   — d| _         | j                  j                  «       \  }}}}|j                  dz
  }d||||fz  | j                  d<   | j                  «        y )Nr   é   z%d %d %d %dÚscrollregion)r$   Ú_cframer™   r_   r,   Ú_redraw)r/   ÚeventÚx1Úy1Úx2Úy2s         r3   r.   zRecursiveDescentApp._configure  sW   € ØˆŒØŸ<™<×4Ñ4Ó6ÑˆˆR��RØ�\‰\˜AÑˆØ'4¸¸BÀÀBÐ7GÑ'Gˆ�‰�^Ñ$Ø�‰�r5   c                 óú  — t        |«      x| _        }|j                  dddd¬«       t        |d| j                  ¬«      | _        | j
                  j                  d¬«       t        |d	d
¬«      }|j                  ddd
d¬«       t        |dd| j                  ¬«      | _        t        |dddd| j                  ¬«      | _        | j                  j                  d¬«       | j                  j                  ddd
¬«       y )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Ø×Ñ ¨(¸ÀÐÔCÜ$ØÐ 1¸¿
¹
ô 
ˆÔð 	×Ñ×!Ñ! vÐ!Ô.Ü˜m°HÀQÔGˆØ×Ñ ¨'¸!À!ÐÔDÜØ i¸IÈDÏJÉJô
ˆŒô  ØØØØ Ø Ø—‘ô
ˆŒð 	�‰×Ñ &ÐÔ)Ø�‰×Ñ &¨s¸1ÐÕ=r5   c                 óØ   — t        |dddd¬«      | _        | j                  j                  dddd¬	«       | j                  j                  «       x}| _        d | _        g | _        d | _        y )
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&  sk   € Ü"ØØàØØô
ˆŒð 	�‰×Ñ ¨°eÀ!ÐÔDØ $§¡× 3Ñ 3Ó 5Ð5ˆ�”ð ˆŒ
ØˆÔØˆ�r5   c                 óÆ  — t        |«      }t        |d¬«      }|j                  dd| j                  d¬«       |j                  dd| j                  d¬«       |j                  dd	| j                  d
¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd| j                  d¬«       |j                  dd| j                  d¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd	| j                  d¬«       |j                  «        |j                  dd| j                  d¬«       |j                  dd| j                  d¬«       |j                  «        |j                  dd| j                  d¬«       |j                  dd|¬«       t        |d¬«      }|j                  dd| j                  | j                  ¬«       |j                  «        |j!                  d| j"                  dd| j$                  ¬ «       |j!                  d!| j"                  dd"| j$                  ¬ «       |j!                  d#| j"                  dd$| j$                  ¬ «       |j!                  d%| j"                  dd&| j$                  ¬ «       |j!                  d'| j"                  dd(| j$                  ¬ «       |j                  d)d|¬«       t        |d¬«      }|j!                  d*d| j&                  d¬+«       |j!                  d,d| j&                  dd-¬.«       |j!                  d/d| j&                  dd0¬.«       |j!                  d1d| j&                  d2d3¬.«       |j                  d4d	|¬«       t        |d¬«      }|j                  d5d| j(                  ¬6«       |j                  d7d| j*                  d8¬«       |j                  d9d|¬«       |j-                  |¬:«       y );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±zÈuð 	ô 	
ð 	×ÑØ'ØØ—O‘OØ ð	 	ô 	
ð 	×ÑØ A¨t¯|©|Èð 	ô 	
ð 	×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×ÑØ ØØ×%Ñ%Ø ð	 	ô 	
ð 	×ÑØØØ×&Ñ&Ø ð	 	ô 	
ð 	×Ñ &°A¸HÐÔEä˜¨Ô+ˆØ×ÑØ A¨t¯y©yÀgð 	ô 	
ð 	×ÑÔ Ø×ÑØ Q°·
±
Èð 	ô 	
ð 	×ÑØ a°·±È(ð 	ô 	
ð 	×ÑÔ Ø×ÑØ¨°D·N±NÐPXð 	ô 	
ð 	×Ñ '°Q¸XÐÔFä˜¨Ô+ˆØ× Ñ Ø ØØ×'Ñ'Ø×(Ñ(ð	 	!ô 	
ð 	×ÑÔ Ø× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	× Ñ ØØ—Z‘ZØØØ—K‘Kð 	!ô 	
ð 	×Ñ &°A¸HÐÔEä˜7¨AÔ.ˆØ×#Ñ#Ø ¨A¸×8NÑ8NÐVWð 	$ô 	
ð 	×#Ñ#Ø"ØØ×+Ñ+ØØð 	$ô 	
ð 	×#Ñ#Ø$ØØ×+Ñ+ØØð 	$ô 	
ð 	×#Ñ#Ø"ØØ×+Ñ+ØØð 	$ô 	
ð 	×Ñ )°q¸{ÐÔKä˜¨Ô+ˆØ×Ñ 7°aÀÇÁÐÔLØ×ÑØ ¨A°t·y±yÈdð 	ô 	
ð 	×Ñ &°A¸HÐÔEà�‰˜7ˆÕ#r5   c                 óz   — |D ]  }|j                  «       |   }Œ t        |t        «      r|j                  «       }|S ©N)ÚsubtreesÚ
isinstancer   rº   )r/   ÚwidgetÚtreelocÚis       r3   Ú_getzRecursiveDescentApp._get¾  s=   € Øò 	*ˆAØ—_‘_Ó& qÑ)‰Fð	*ä�fÔ/Ô0Ø—\‘\“^ˆFØˆr5   c                 óØ  — | j                   }| j                  �%| j                  j                  | j                  «       | j                  D ]  }| j                  j                  |«       Œ | j
                  �%| j                   j                  | j
                  «       d| j                  j                  «        f}d| j                  j                  «        df}dd||dœ}| j                  j                  «       }t        ||fi |¤Ž| _        | j                  j                  | j                  dd«       d| j                  j                  «        f}| j                  j                  «       d   x}}| j                  D �	cg c]  }	t        ||	| j                   ¬	«      ‘Œ c}	| _        | j                  D ]e  }| j                  j                  |d
d
«       |j#                  d
||j%                  «       d   z
  dz
  «       t'        ||j%                  «       d   «      }Œg |j)                  d|dz
  d|dz
  d¬«      | _        | j+                  «        | j-                  «        | j/                  «        y c c}	w )Nr:   r;   ú#000000r>   )Ú
tree_colorÚ
tree_widthÚ	node_fontÚ	leaf_fontr¦   r   rŠ   r8   r   r   ixìÿÿiˆ  ú.)Údash)r,   r´   rš   Údestroy_widgetrµ   r¶   ÚdeleterA   rC   r   Útreer   Ú
add_widgetr™   r   r   rE   ÚmoveÚbboxrn   Úcreate_lineÚ_highlight_nodesÚ_highlight_prodlistÚ_position_text)
r/   r³   ÚtwidgetÚhelvr;   Úattribsrù   r‰   rd   Úwords
             r3   r›   zRecursiveDescentApp._redrawÉ  s  € Ø—‘ˆð �:‰:Ð!Ø�L‰L×'Ñ'¨¯
©
Ô3Ø×(Ñ(ò 	1ˆGØ�L‰L×'Ñ'¨Õ0ð	1à�>‰>Ð%Ø�L‰L×Ñ §¡Ô/ð ˜dŸj™jŸn™nÓ.Ð.Ð/ˆØ˜dŸj™jŸn™nÓ.Ð.°Ð7ˆà#ØØØñ	
ˆð �|‰|× Ñ Ó"ˆÜ(¨°ÑA¸ÑAˆŒ
Ø�‰×Ñ §
¡
¨B°Ô2ð ˜dŸj™jŸn™nÓ.Ð.Ð/ˆØ—\‘\×.Ñ.Ó0°Ñ3Ð3ˆ�àBFÇ*Á*ö
Ø:>ŒJ�v˜t¨$¯*©*Ö5ò
ˆÔð ×(Ñ(ò 	*ˆGØ�L‰L×#Ñ# G¨Q°Ô2Ø�L‰L˜˜F W§\¡\£^°AÑ%6Ñ6¸Ñ:Ô;Ü�A�w—|‘|“~ aÑ(Ó)‰Að	*ð  ×+Ñ+¨E°1°q±5¸$ÀÀAÁÈCÐ+ÓPˆŒð 	×ÑÔØ× Ñ Ô"ð 	×ÑÕùò!
s   Å:I'c                 ód   — | j                  «        | j                  «        | j                  «        y rè   )rþ   rÿ   r   r†   s    r3   Ú_redraw_quickz!RecursiveDescentApp._redraw_quickö  s&   € à×ÑÔØ× Ñ Ô"Ø×ÑÕr5   c                 ó‚  — d| j                   j                  «        df}| j                  j                  «       d d D ]@  }d| j	                  | j
                  |«      d<   || j	                  | j
                  |«      d<   ŒB | j                  j                  «       dd  D ]!  }d| j	                  | j
                  |«      d<   Œ# y )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™jŸn™nÓ.Ð.°Ð7ˆØ—|‘|×,Ñ,Ó.¨r°Ð2ò 	:ˆGØ6?ˆD�I‰I�d—j‘j 'Ó*¨7Ñ3Ø59ˆD�I‰I�d—j‘j 'Ó*¨6Ò2ð	:ð —|‘|×,Ñ,Ó.¨q¨rÐ2ò 	@ˆGØ6?ˆD�I‰I�d—j‘j 'Ó*¨7Ò3ñ	@r5   c                 ó  — | j                   j                  dd«       | j                  j                  «       }| j                  j	                  «       }| j
                  }t        t        |«      «      D ]“  }||   |v rh||   |v r#| j                   j                  |d||   z  «       n"| j                   j                  |d||   z  «       | j                   j                  |«       Œr| j                   j                  |d||   z  «       Œ• y )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ˆEØ˜5Ñ! ZÑ/Ø˜uÑ%¨Ñ0Ø—N‘N×)Ñ)¨%°¸ÀUÑ9KÑ1KÕLà—N‘N×)Ñ)¨%°ÀÈUÑASÑ1SÔTØ—‘×,Ñ,¨UÕ3à—‘×%Ñ% e¨U°[ÀÑ5GÑ-GÕHñ	Ir5   c                 óŒ  — t        | j                  «      }|t        | j                  j                  «       «      z
  }| j	                  «       d | }| j
                  j                  «       d   }t        dt        |«      «      D ]m  }| j                  |   }||   }d|d<   d|d<   |j                  |j                  «       d   |j                  «       d   z
  d«       |j                  «       d   dz   }Œo t        t        |«      |«      D ]R  }| j                  |   }d|d<   |j                  ||j                  «       d   z
  d«       |j                  «       d   dz   }ŒT | j                  j                  «       r| j                  D ]  }d|d<   Œ	 t        dt        |«      «      D ]¢  }| j                  |   }||   }|j                  «       d   |j                  «       d	   z
  d
z
  }	t        |	|j                  «       j                  «       j                  «       d	   |j                  «       d	   z
  dz   «      }	|j                  d|	«       Œ¤ y )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  s  € ä�t—z‘z“?ˆØ¤ T§\¡\×%@Ñ%@Ó%BÓ!CÑCˆØ×"Ñ"Ó$ \ kÐ2ˆØ�z‰z�‰Ó  Ñ#ˆÜ�qœ#˜f›+Ó&ò 	)ˆAØ×&Ñ& qÑ)ˆFØ˜!‘9ˆDØ'ˆF�7‰OØ%ˆD�‰MØ�K‰K˜Ÿ	™	› A™¨¯©«°qÑ)9Ñ9¸1Ô=Ø—;‘;“= Ñ# bÑ(‰Dð	)ô ”s˜6“{ HÓ-ò 	)ˆAØ×&Ñ& qÑ)ˆFØ'ˆF�7‰OØ�K‰K˜˜vŸ{™{›}¨QÑ/Ñ/°Ô3Ø—;‘;“= Ñ# bÑ(‰Dð		)ð �<‰<×*Ñ*Ô,Ø×,Ñ,ò -�Ø#,�˜Ò ð-ô �qœ#˜f›+Ó&ò 	ˆAØ×&Ñ& qÑ)ˆFØ˜!‘9ˆDØ—‘“˜qÑ! D§I¡I£K°¡NÑ2°TÑ9ˆBÜ�R˜Ÿ™›×,Ñ,Ó.×3Ñ3Ó5°aÑ8¸4¿9¹9»;Àq¹>ÑIÈBÑNÓOˆBØ�I‰I�a˜Õñ	r5   Nc                 óž   — |€| j                   }t        |t        «      r-g }|j                  «       D ]  }|| j	                  |«      z  }Œ |S |gS rè   )r´   rê   r   ré   r  )r/   rù   r  Úchilds       r3   r  z RecursiveDescentApp._tree_leaves9  sV   € Øˆ<Ø—:‘:ˆDÜ�dÔ-Ô.ØˆFØŸ™›ò 3�Ø˜$×+Ñ+¨EÓ2Ñ2‘ð3àˆMà�6ˆMr5   c                 ón   — d| _         | j                  €y | j                  j                  «        d | _        y ©Nr   )r$   r   r{   ©r/   rw   s     r3   r{   zRecursiveDescentApp.destroyH  s-   € ØˆŒØ�9‰9ÐØØ�	‰	×ÑÔØˆ�	r5   c                 ó¸   — d| _         | j                  j                  | j                  «       d| j                  d<   d| j
                  d<   | j                  «        y )Nr   zReset ApplicationrO   Ú )r$   r   r+   r   r«   r¬   r›   r%  s     r3   r�   zRecursiveDescentApp.resetO  sD   € ØˆŒØ�‰×Ñ §
¡
Ô+Ø"5ˆ�‰˜ÑØ"$ˆ�‰˜ÑØ�‰�r5   c                 óÊ   — | j                   j                  «       dk(  r| j                   j                  d«       | j                  rd| _        y d| _        | j	                  «        y )Nr   r>   r   )r!   rC   r"   r$   Ú_stepr%  s     r3   r~   zRecursiveDescentApp.autostepV  sK   € Ø×!Ñ!×%Ñ%Ó'¨1Ò,Ø×"Ñ"×&Ñ& qÔ)Ø�>Š>ØˆD�NàˆDŒNØ�J‰J�Lr5   c                 ó   — d| _         y r$  )r$   r%  s     r3   r   z#RecursiveDescentApp.cancel_autostep_  s	   € àˆ�r5   c                 ó2   — d| _         | j                  «        y r$  )r$   r)  r%  s     r3   r€   zRecursiveDescentApp.stepd  s   € ØˆŒØ�
‰
�r5   c                 ó2   — d| _         | j                  «        y r$  )r$   Ú_matchr%  s     r3   r|   zRecursiveDescentApp.matchh  s   € ØˆŒØ�‰�r5   c                 ó2   — d| _         | j                  «        y r$  )r$   Ú_expandr%  s     r3   r\   zRecursiveDescentApp.expandl  s   € ØˆŒØ�‰�r5   c                 ó2   — d| _         | j                  «        y r$  )r$   Ú
_backtrackr%  s     r3   r}   zRecursiveDescentApp.backtrackp  s   € ØˆŒØ�‰Õr5   c                 ót  — | j                   ry | j                  «       rna| j                  j                  «       r| j	                  «       rn6| j                  «       rn%d| j                  d<   d| j                  d<   d| _        | j                  j                  «       rd| _        | j                  dxx   dz  cc<   y y )NÚFinishedrO   r'  r   z    [COMPLETE PARSE])
r#   r/  r   Úuntried_matchr-  r1  r«   r¬   r$   r  r†   s    r3   r)  zRecursiveDescentApp._stept  sš   € Ø×ÒØð �<‰<Œ>ØØ�\‰\×'Ñ'Ô)¨d¯k©k¬mØØ�_‰_ÔØà&0ˆD�O‰O˜FÑ#Ø&(ˆD�O‰O˜FÑ#ØˆDŒNð �<‰<×*Ñ*Ô,ØˆDŒNØ�O‰O˜FÓ#Ð'=Ñ=Ô#ð -r5   c                 óÐ  — | j                   ry | j                  j                  «       }| j                  j                  «       }|�…d| j                  d<   || j
                  d<   | j                  j                  dd«       | j                  j                  |«      }| j                  j                  |«       | j                  |d   «       yd| j                  d<   d| j
                  d<   y)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   r/  zRecursiveDescentApp._expand‰  sÃ   € Ø×ÒØØ—|‘|×,Ñ,Ó.ˆØ�\‰\× Ñ Ó"ˆØˆ>Ø&/ˆD�O‰O˜FÑ#Ø&(ˆD�O‰O˜FÑ#Ø�N‰N×*Ñ*¨1¨eÔ4Ø×%Ñ%×+Ñ+¨BÓ/ˆEØ�N‰N×(Ñ(¨Ô/Ø× Ñ  ¨a¡Ô1Øà&/ˆD�O‰O˜FÑ#Ø&>ˆD�O‰O˜FÑ#Ør5   c                 ó,  — | j                   ry | j                  j                  «       }| j                  j                  «       }|�3d| j                  d<   || j
                  d<   | j                  |d   «       yd| j                  d<   d| j
                  d<   y)NzMatch:rO   r   Tz(failed)F)r#   r   r
  r|   r«   r¬   Ú_animate_match)r/   rw   r9  r:  s       r3   r-  zRecursiveDescentApp._match›  s‡   € Ø×ÒØØ—|‘|×,Ñ,Ó.ˆØ�\‰\×ÑÓ!ˆØˆ>Ø&.ˆD�O‰O˜FÑ#Ø&(ˆD�O‰O˜FÑ#Ø×Ñ ¨Q¡Ô0Øà&.ˆD�O‰O˜FÑ#Ø&0ˆD�O‰O˜FÑ#Ør5   c                 ó.  — | j                   ry | j                  j                  «       rÉ| j                  j                  «       }| j                  j	                  «       d   D ]  }||   }Œ	 d| j
                  d<   d| j                  d<   t        |t        «      r-| j                  | j                  j	                  «       d   «       y| j                  | j                  j	                  «       d   «       yd| _        d| j
                  d<   d| j                  d<   y)Nr   r”   rO   r'  Tr3  F)r#   r   r}   rù   r
  r«   r¬   rê   r   Ú_animate_backtrackÚ_animate_match_backtrackr$   )r/   rw   Úeltrí   s       r3   r1  zRecursiveDescentApp._backtrackª  sð   € Ø×ÒØØ�<‰<×!Ñ!Ô#Ø—,‘,×#Ñ#Ó%ˆCØ—\‘\×*Ñ*Ó,¨QÑ/ò �Ø˜!‘f‘ðà&1ˆD�O‰O˜FÑ#Ø&(ˆD�O‰O˜FÑ#Ü˜#œtÔ$Ø×'Ñ'¨¯©×(=Ñ(=Ó(?ÀÑ(BÔCð ð ×-Ñ-¨d¯l©l×.CÑ.CÓ.EÀaÑ.HÔIØàˆDŒNØ&0ˆD�O‰O˜FÑ#Ø&(ˆD�O‰O˜FÑ#Ør5   c                 ó–   — d}d}	 ddl m}  |||¬«      j                  «        y # t        $ r t	        | j
                  ||«       Y y w xY w)NzANLTK Recursive Descent Parser Application
Written by Edward Loperz+About: Recursive Descent Parser Applicationr   )ÚMessage)Úmessager   )Útkinter.messageboxrB  ÚshowÚ	Exceptionr   r   )r/   rw   ÚABOUTÚTITLErB  s        r3   rß   zRecursiveDescentApp.about¾  sK   € àUð 	ð >ˆð	.Ý2á˜E¨Ô/×4Ñ4Õ6øÜò 	.Ü�T—Y‘Y  uÖ-ð	.ús   †% ¥ AÁAc                 óð   — d| _         	 t        | j                  dt        xs dj	                  «       dd¬«       y # t
        $ r2 t        | j                  dt        xs dj	                  «       d¬«       Y y w xY w)Nr   z*Help: Recursive Descent Parser Applicationr'  éK   Úfixed)r¨   r7   )r¨   )r$   r   r   Ú__doc__ÚstriprF  r%  s     r3   rƒ   zRecursiveDescentApp.helpÊ  sl   € ØˆŒð	ÜØ—	‘	Ø<Ü’˜B×%Ñ%Ó'ØØöøô ò 	ÜØ—	‘	Ø<Ü’˜B×%Ñ%Ó'Ø÷	ð	ús   ‰0: º8A5Á4A5c                 óF   — d| _         | j                  j                  «        y r$  )r$   rš   Úprint_to_filer%  s     r3   r‚   zRecursiveDescentApp.postscriptÝ  s   € ØˆŒØ�‰×"Ñ"Õ$r5   c                 óR   — t        «       ry | j                  j                  |i |¤Ž y)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   rQ  zRecursiveDescentApp.mainloopá  s%   € ô Œ9ØØˆ�	‰	×Ñ˜DÐ+ FÓ+r5   c                 óÈ  — |�| j                   j                  |«       | j                   j                  «       }| j                  j	                  t        |«       ¬«       | j                  j	                  t        |«       ¬«       | j                  j	                  t        |«       ¬«       | j                  j	                  t        |dz   «       ¬«       | j                  «        y )N)r9   r>   )
rA   r"   rC   rE   Ú	configureÚabsrD   r?   rF   r›   )r/   r9   s     r3   rÞ   zRecursiveDescentApp.resizeì  s¢   € ØÐØ�J‰J�N‰N˜4Ô Ø�z‰z�~‰~ÓˆØ�
‰
×Ñ¤C¨£I ,ÐÔ/Ø�‰× Ñ ¬¨D«	 lÐ Ô3Ø�‰×Ñ¤s¨4£y \ÐÔ2Ø�‰×Ñ¤s¨4°!©8£}Ð%5ÐÔ6Ø�‰�r5   c                 ó  — | j                   j                  «       r9| j                  j                  ddd| j                  ¬«       d| j
                  d<   n)| j                  j                  «        d| j
                  d<   d| j                  d<   y )	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ú  sv   € Ø×Ñ×!Ñ!Ô#Ø�O‰O× Ñ Ø &¨q¸×8KÑ8Kð !ô ð '5ˆD�O‰O˜FÒ#à�O‰O×'Ñ'Ô)Ø&4ˆD�O‰O˜FÑ#Ø"$ˆ�‰˜Òr5   c                 ó°  — | j                   j                  «       }t        |«      dk7  ry t        |d   «      }| j                  j                  «       }| j                  j                  | j                  |   «      }|rjd| j                  d<   || j                  d<   | j                   j                  dd«       | j                   j                  |«       | j                  |d   «       y | j                   j                  dd«       | j                  j                  «       D ]8  }| j                  j                  |«      }| j                   j                  |«       Œ: y )Nr   r   r6  rO   r]   )rh   Úcurselectionro   Úintr   r
  r\   rk   r«   r¬   r7  r  r8  r  r  )r/   rœ   Ú	selectionr  r9  rt   Úprods          r3   rq   z$RecursiveDescentApp._prodlist_select  s  € Ø—N‘N×/Ñ/Ó1ˆ	Üˆy‹>˜QÒØÜ�I˜a‘LÓ!ˆØ—|‘|×,Ñ,Ó.ˆØ—\‘\×(Ñ(¨×):Ñ):¸5Ñ)AÓBˆ
áØ&/ˆD�O‰O˜FÑ#Ø&0ˆD�O‰O˜FÑ#Ø�N‰N×*Ñ*¨1¨eÔ4Ø�N‰N×(Ñ(¨Ô/Ø× Ñ  ¨a¡Õ1ð �N‰N×*Ñ*¨1¨eÔ4ØŸ™×;Ñ;Ó=ò 4�Ø×)Ñ)×/Ñ/°Ó5�Ø—‘×,Ñ,¨UÕ3ñ4r5   c           
      ó   — | j                  | j                  |«      }|j                  «       }t        |j                  «       t        «       }| j
                  j                  «       }|D ]  }||   }Œ	 t        | j                  || j                  dddd| j                  ¬«      }d|j                  «       d<   |j                  «       j                  «       d d \  }}	|j                  «       j                  «       d d \  }
}|j                  ||
z
  |	|z
  «       |rY| j                  j                  |dd«       |j                  d|j                  «       j                  «       d   z
  d«       || _        n |j                  «       j!                  ||«       |j#                  «       r›||j                  «       j%                  «       dz  z   |j#                  «       d   j                  «       d   dz  z
  |j#                  «       d   j                  «       d   dz  z
  }|j#                  «       D ]  }|j                  |d«       Œ | j'                  |«       |r| j                  j)                  |«       n|j+                  «        t-        | j.                  j1                  «       dd	«      D �cg c]1  }d
dt3        d|z  | j.                  j1                  «       z  «      z  z  ‘Œ3 }}|j                  «       d   dz   | j                  j5                  | j6                  «      d   z
  }|dkD  rJ| j8                  D ]  }|j                  d|«       Œ | j                  j                  | j6                  d|«       | j;                  ||«       y c c}w )NrR   r>   )ró   Ú
leaf_colorrò   rñ   Ú
node_colorrô   r  r	  r   r   r¦   éÿÿÿÿúgray%dr°   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   r\  Úcoordsr¶   rµ   Ú_animate_expand_frame)r/   rì   Ú	oldwidgetÚoldtreer²   rù   rí   rë   ÚoldxÚoldyÚnewxÚnewyÚdxÚsubtreer¢   Úcolorsr   r  s                     r3   r8  z#RecursiveDescentApp._animate_expand)  s  € Ø—I‘I˜dŸj™j¨'Ó2ˆ	Ø×"Ñ"Ó$ˆÜ˜WŸ^™^Ó-Ô/@ÓAÐAˆà�|‰|× Ñ Ó"ˆØò 	ˆAØ˜‘7‰Dð	ô %Ø�L‰LØØ—n‘nØØØØØ—j‘jô	
ˆð #,ˆ�‰‹�wÑà—}‘}“×+Ñ+Ó-¨b¨qÐ1‰ˆˆtØ—|‘|“~×*Ñ*Ó,¨R¨aÐ0‰ˆˆtØ�‰�D˜4‘K ¨¡Ô-áØ�L‰L×#Ñ# F¨A¨qÔ1Ø�K‰K˜˜VŸ\™\›^×0Ñ0Ó2°1Ñ5Ñ5°qÔ9ØˆD�Jà�N‰NÓ×*Ñ*¨7°FÔ;ð �?‰?ÔàØ—,‘,“.×&Ñ&Ó(¨1Ñ,ñ-à—/‘/Ó# AÑ&×+Ñ+Ó-¨aÑ0°1Ñ4ñ5ð —/‘/Ó# AÑ&×+Ñ+Ó-¨aÑ0°1Ñ4ñ5ð ð "Ÿ?™?Ó,ò $�Ø—‘˜R Õ#ð$ð 	�‰�vÔáØ�L‰L×'Ñ'¨Õ0à�O‰OÔô ˜4×1Ñ1×5Ñ5Ó7¸¸BÓ?ö
àð ˜œS  a¡¨$×*@Ñ*@×*DÑ*DÓ*FÑ!FÓGÑGÓHð
ˆð 
ð �[‰[‹]˜1Ñ Ñ" T§\¡\×%8Ñ%8¸¿¹Ó%HÈÑ%KÑKˆØ�Š6Ø×,Ñ,ò $�Ø—‘˜Q Õ#ð$à�L‰L×Ñ˜dŸn™n¨a°Ô4à×"Ñ" 6¨6Õ2ùò
s   Ê"6M;c                 ó$  — |j                  «       }t        |t        «      sy|j                  «       j	                  |«      }|j                  «       |dz   d }|rF|j                  «       d   |d   j                  «       d   z
  dz   }|D ]  }|j                  |d«       Œ |dkD  r\|j                  «       |dz
     }t        d|j                  «       d   |j                  «       d   z
  dz   «      }|j                  |d«       | j                  |«       y)z@
        Make sure that no sibling tree bbox's overlap.
        Nr   r>   r   r°   )	rr   rê   r   ré   r  rü   rû   r  re  )r/   Útreesegrr   r  Ú	rsiblingsrn  ÚsiblingÚlsiblings           r3   re  zRecursiveDescentApp._makeroomj  s   € ð —‘Ó!ˆÜ˜&Ô"3Ô4Øà—‘Ó!×'Ñ'¨Ó0ˆð —O‘OÓ% e¨a¡i kÐ2ˆ	ÙØ—‘“ Ñ" Y¨q¡\×%6Ñ%6Ó%8¸Ñ%;Ñ;¸bÑ@ˆBØ$ò $�Ø—‘˜R Õ#ð$ð �1Š9Ø—‘Ó(¨°©Ñ3ˆHÜ�Q˜Ÿ™›¨Ñ*¨W¯\©\«^¸AÑ->Ñ>ÀÑCÓDˆBØ�L‰L˜˜QÔð 	�‰�vÕr5   c                 ó2  — t        |«      dkD  rd| _        |d   |d<   |j                  «       D ]1  }t        |t        «      r|d   |j                  «       d<   Œ*|d   |d<   Œ3 | j                  j                  d| j                  ||dd  «       y d|d<   |j                  «       D ]+  }t        |t        «      rd|j                  «       d<   Œ'd|d<   Œ- | j                  «        d|j                  «       d<   d| _        | j                  r| j                  «        y y )Nr   r   r	  é2   rŽ   )ro   r#   ré   rê   r   rº   r   rX  rg  r  r$   r)  )r/   rë   rp  ro  s       r3   rg  z)RecursiveDescentApp._animate_expand_frame„  s  € Üˆv‹;˜Š?Ø#$ˆDÔ Ø$ Q™iˆF�7‰OØ!Ÿ?™?Ó,ò 1�Ü˜gÔ'8Ô9Ø/5°a©y�G—M‘M“O GÒ,à'-¨a¡y�G˜GÒ$ð	1ð
 �I‰I�O‰O˜B × :Ñ :¸FÀFÈ1È2ÀJÕOà%ˆF�7‰OØ!Ÿ?™?Ó,ò /�Ü˜gÔ'8Ô9Ø/6�G—M‘M“O GÒ,à'.�G˜GÒ$ð	/ð
 ×ÑÔ Ø&-ˆF�L‰L‹N˜7Ñ#Ø#$ˆDÔ Ø�~Š~Ø—
‘
•ð r5   c                 óL  — | j                   j                  «       dk(  rg }ng d¢}|t        d| j                   j                  «       dz   «      D �cg c]1  }ddt        d|z  | j                   j                  «       z  «      z  z  ‘Œ3 c}z  }| j	                  | j
                  |«      j                  «       g}|d   j                  «       D ]C  }t        |t        «      r |j                  |j                  «       «       Œ3|j                  |«       ŒE | j                  ||«       y c c}w )Nr   )ú#a00000rð   ry  r   rc  r°   )r!   rC   r  r\  rî   r´   rr   ré   rê   r   Úappendrº   Ú_animate_backtrack_frame)r/   rì   rp  r¢   Úwidgetsro  s         r3   r>  z&RecursiveDescentApp._animate_backtrack›  s  € à×!Ñ!×%Ñ%Ó'¨1Ò,Ø‰Fâ6ˆFØä˜1˜d×4Ñ4×8Ñ8Ó:¸QÑ>Ó?ö
àð ˜œS  a¡¨4×+AÑ+A×+EÑ+EÓ+GÑ!HÓIÑIÓJò
ñ 	
ˆð
 —9‘9˜TŸZ™Z¨Ó1×8Ñ8Ó:Ð;ˆØ˜q‘z×*Ñ*Ó,ò 	(ˆGÜ˜'Ô#4Ô5Ø—‘˜wŸ}™}›Õ/à—‘˜wÕ'ð		(ð 	×%Ñ% g¨vÕ6ùò
s   Á6D!c                 ó„  — t        |«      dkD  rBd| _        |D ]
  }|d   |d<   Œ | j                  j                  d| j                  ||dd  «       y |d   j                  «       D ]&  }|d   j                  |«       |j                  «        Œ( | j                  «        d| _        | j                  r| j                  «        y y )Nr   r   r	  rw  )ro   r#   r   rX  r{  ré   Úremove_childr{   r  r$   r)  )r/   r|  rp  rë   s       r3   r{  z,RecursiveDescentApp._animate_backtrack_frame¯  s¶   € Üˆv‹;˜Š?Ø#$ˆDÔ Ø!ò ,�Ø"(¨¡)��w’ð,à�I‰I�O‰O˜B × =Ñ =¸wÈÈqÈrÈ
ÕSà! !™*×-Ñ-Ó/ò !�Ø˜‘
×'Ñ'¨Ô/Ø—‘Õ ð!ð ×ÑÔ Ø#$ˆDÔ Ø�~Š~Ø—
‘
•ð r5   c                 ól  — | j                  | j                  |«      }|j                  «       j                  «       }|j	                  «       d   |j	                  «       d   z
  dz   t        d| j                  j                  «       «      z  }| j                  | j                  j                  «       ||«       y )NrŠ   r   rÊ   )	rî   r´   rr   rº   rü   r  r!   rC   Ú_animate_match_backtrack_frame)r/   rì   rë   Únoder   s        r3   r?  z,RecursiveDescentApp._animate_match_backtrack¾  s’   € Ø—‘˜4Ÿ:™: wÓ/ˆØ�}‰}‹×$Ñ$Ó&ˆØ�i‰i‹k˜!‰n˜vŸ{™{›}¨QÑ/Ñ/°"Ñ4¼Øˆt×%Ñ%×)Ñ)Ó+ó9
ñ 
ˆð 	×+Ñ+¨D×,BÑ,B×,FÑ,FÓ,HÈ&ÐRTÕUr5   c                 óJ  — | j                  | j                  |«      }| j                  d   j                  «       d   |j                  «       d   z
  dz
  t	        d| j
                  j                  «       «      z  }| j                  | j
                  j                  «       ||«       y )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
ñ 
ˆð 	×!Ñ! $×"8Ñ"8×"<Ñ"<Ó">ÀÈÕKr5   c                 ó  — |dkD  rFd| _         |j                  d|«       | j                  j                  d| j                  |dz
  ||«       y d|d<   | j                  «        d| _         | j                  r| j                  «        y y )Nr   r   r°   r  r	  )r#   rû   r   rX  rƒ  r  r$   r)  ©r/   Úframerë   r   s       r3   rƒ  z(RecursiveDescentApp._animate_match_frameÎ  ss   € Ø�1Š9Ø#$ˆDÔ Ø�K‰K˜˜2ÔØ�I‰I�O‰O˜B × 9Ñ 9¸5À1¹9ÀfÈbÕQà'ˆF�7‰OØ×ÑÔ Ø#$ˆDÔ Ø�~Š~Ø—
‘
•ð r5   c                 ó@  — |dkD  rFd| _         |j                  d|«       | j                  j                  d| j                  |dz
  ||«       y |j                  «       j                  |«       |j                  «        d| _         | j                  r| j                  «        y y )Nr   r   r°   )
r#   rû   r   rX  r€  rr   r~  r{   r$   r)  r…  s       r3   r€  z2RecursiveDescentApp._animate_match_backtrack_frameÚ  s�   € Ø�1Š9Ø#$ˆDÔ Ø�K‰K˜˜2ÔØ�I‰I�O‰OØ�D×7Ñ7¸À¹ÀFÈBõð �M‰M‹O×(Ñ(¨Ô0Ø�N‰NÔØ#$ˆDÔ Ø�~Š~Ø—
‘
•ð r5   c                 óv   — t        | j                  | j                  j                  «       | j                  «       y rè   )r   r   r   r0   Úset_grammarr%  s     r3   r„   z RecursiveDescentApp.edit_grammarè  s%   € Ü�$—)‘)˜TŸ\™\×1Ñ1Ó3°T×5EÑ5EÕFr5   c                 ó  — | j                   j                  |«       t        |j                  «       «      | _        | j
                  j                  dd«       | j                  D ]!  }| j
                  j                  dd|z  «       Œ# y )Nr   r]   r  )r   r‰  ri   rj   rk   rh   rø   rl   )r/   r0   rt   s      r3   r‰  zRecursiveDescentApp.set_grammarë  sl   € Ø�‰× Ñ  Ô)Ü  ×!4Ñ!4Ó!6Ó7ˆÔØ�‰×Ñ˜a Ô'Ø×+Ñ+ò 	?ˆJØ�N‰N×!Ñ! %¨%°*Ñ*<Õ>ñ	?r5   c                 óˆ   — dj                  | j                  «      }d}d}t        | j                  ||| j                  |«       y )Nú r¿   zEnter a new sentence to parse.)Újoinr   r   r   Úset_sentence)r/   rw   Úsentencer   Úinstrs        r3   r…   z!RecursiveDescentApp.edit_sentenceò  s8   € Ø—8‘8˜DŸJ™JÓ'ˆØˆØ0ˆÜ�D—I‘I˜x¨°×0AÑ0AÀ5ÕIr5   c                 óN   — |j                  «       | _        | j                  «        y rè   )Úsplitr   r�   )r/   r�  s     r3   rŽ  z RecursiveDescentApp.set_sentenceø  s   € Ø—^‘^Ó%ˆŒ
Ø�
‰
�r5   )r   rè   )4Ú__name__Ú
__module__Ú__qualname__rL  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)  r/  r-  r1  rß   rƒ   r‚   rQ  rÞ   rÜ   rq   r8  re  rg  r>  r{  r?  r<  rƒ  r€  r„   r‰  r…   rŽ  © r5   r3   r   r   M   s  „ ñó$:òTJò""HòH:òB)ò`ò>ò.ò"A$òNò+òZò@òIò$ óD	òòòòò
òòòò>ò*ò$òò(
.òò&%ò	,óò	%ò,4ò2?3òBò4ò.7ò(òVòLò
òòGò?òJór5   r   c                  ó†   — ddl m}  | j                  d«      }dj                  «       }t	        ||«      j                  «        y)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   rQ  )r˜  r0   r1   s      r3   Úappr›  ý  s=   € õ
 !à�n‰nð	ó€Gð  +×0Ñ0Ó2€Dä˜ Ó&×/Ñ/Õ1r5   Ú__main__r›  N)rL  Ú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¥     sW   ðñ9÷v O× NÓ NÝ ç GÑ Gß IÓ IÝ 5Ý Ý ÷mñ mò`2ð8 ˆzÒÙ„Eàˆ'�r5   