§
    'ê[fJx  ã                   ó  — d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZ ddlmZ  G d„ d	e¦  «        Zd
Z G d„ d¦  «        Z G d„ d¦  «        Z d„ Z!d„ Z"d„ Z#e$dk    r e"¦   «          dS dS )z
Visualization tools for CFGs.
é    N)
ÚButtonÚCanvasÚEntryÚFrameÚIntVarÚLabelÚ	ScrollbarÚTextÚTkÚToplevel)ÚTreeSegmentWidgetÚtree_to_treesegment)ÚCanvasFrameÚColorizedListÚShowTextÚSymbolWidgetÚ
TextWidget)ÚCFGÚNonterminalÚ_read_cfg_productionÚnonterminals)ÚTreec                   ó4   — e Zd Zej        d         Zd„ Zd„ ZdS )ÚProductionListÚ
rightarrowc                 ó”   — |                      dd¬¦  «         |                      ddd¬¦  «         |                      dd	d
¬¦  «         d S )NÚterminalú#006000©Ú
foregroundÚarrowÚsymbolÚ0)ÚfontÚ	underlineÚnonterminalÚblue©Ú	helveticaiôÿÿÿÚbold©r    r$   ©Ú
tag_config)ÚselfÚ
textwidgetÚoptionss      úA/var/www/piapp/venv/lib/python3.11/site-packages/nltk/draw/cfg.pyÚ_init_colortagszProductionList._init_colortagsR   se   € Ø×Ò˜j°YÐÑ?Ô?Ð?Ø×Ò˜g¨HÀÐÑDÔDÐDØ×ÒØ fÐ3Mð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    c                 ó€  — g }|                      d|                     ¦   «         z  df¦  «         |                      | j        df¦  «         |                     ¦   «         D ]^}t	          |t
          ¦  «        r-|                      d|                     ¦   «         z  df¦  «         ŒD|                      d|z  df¦  «         Œ_|S )Nz%s	r&   r!   ú %sú %rr   )ÚappendÚlhsÚARROWÚrhsÚ
isinstancer   r"   )r.   ÚitemÚcontentsÚelts       r1   Ú
_item_reprzProductionList._item_reprY   s·   € ØˆØ�Š˜ $§(¢(¡*¤*Ñ,¨mÐ<Ñ=Ô=Ð=Ø�Š˜œ WÐ-Ñ.Ô.Ð.Ø—8’8‘:”:ð 	;ð 	;ˆCÝ˜#�{Ñ+Ô+ð ;Ø—’ ¨¯ª©¬Ñ!5°}Ð EÑFÔFÐFÐFà—’ ¨¡¨jÐ 9Ñ:Ô:Ð:Ð:Øˆr3   N)Ú__name__Ú
__module__Ú__qualname__r   ÚSYMBOLSr9   r2   r?   © r3   r1   r   r   O   s?   € € € € € ØÔ  Ô.€Eð
ð 
ð 
ð	ð 	ð 	ð 	ð 	r3   r   aM  

The CFG Editor can be used to create or modify context free grammars.
A context free grammar consists of a start symbol and a list of
productions.  The start symbol is specified by the text entry field in
the upper right hand corner of the editor; and the list of productions
are specified in the main text editing box.

Every non-blank line specifies a single production.  Each production
has the form "LHS -> RHS," where LHS is a single nonterminal, and RHS
is a list of nonterminals and terminals.

Nonterminals must be a single word, such as S or NP or NP_subj.
Currently, nonterminals must consists of alphanumeric characters and
underscores (_).  Nonterminals are colored blue.  If you place the
mouse over any nonterminal, then all occurrences of that nonterminal
will be highlighted.

Terminals must be surrounded by single quotes (') or double
quotes(").  For example, "dog" and "New York" are terminals.
Currently, the string within the quotes must consist of alphanumeric
characters, underscores, and spaces.

To enter a new production, go to a blank line, and type a nonterminal,
followed by an arrow (->), followed by a sequence of terminals and
nonterminals.  Note that "->" (dash + greater-than) is automatically
converted to an arrow symbol.  When you move your cursor to a
different line, your production will automatically be colorized.  If
there are any errors, they will be highlighted in red.

Note that the order of the productions is significant for some
algorithms.  To re-order the productions, use cut and paste to move
them.

Use the buttons at the bottom of the window when you are done editing
the CFG:
  - Ok: apply the new CFG, and exit the editor.
  - Apply: apply the new CFG, and do not exit the editor.
  - Reset: revert to the original CFG, and do not exit the editor.
  - Cancel: revert to the original CFG, and exit the editor.

c                   ób  — e Zd ZdZej        d         Z ej        dez   dz   ¦  «        Z	 ej        dez   dz   ¦  «        Z
 ej        dez   dz   dz   ¦  «        Z ej        dez   d	z   ¦  «        Zd
Zd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd"d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!dS )#Ú	CFGEditora*  
    A dialog window for creating and editing context free grammars.
    ``CFGEditor`` imposes the following restrictions:

    - All nonterminals must be strings consisting of word
      characters.
    - All terminals must be strings consisting of word characters
      and space characters.
    r   z(^\s*\w+\s*)(->|(z))z\s*(->|(z))\s*z#((\w+|'[\w ]*'|\"[\w ]*\"|\|)\s*)*$z\w+|->|'[\w ]+'|"[\w ]+"|(ú)r(   Nc                 ó0  — || _         |�|| _        n"t          t          d¦  «        g ¦  «        | _        || _        d| _        t          |¦  «        | _        |                      ¦   «          |  	                    ¦   «          | j
                             ddd¬¦  «         |                      ¦   «          | j                             ddd¬¦  «         |                      ¦   «          | j                             ddd¬¦  «         | j                             ¦   «          d S )	NÚSé   ÚtopÚxr   ©ÚsideÚfillÚexpandÚbothÚbottom)Ú_parentÚ_cfgr   r   Ú_set_cfg_callbackÚ _highlight_matching_nonterminalsr   Ú_topÚ_init_bindingsÚ_init_startframeÚ_startframeÚpackÚ_init_prodframeÚ
_prodframeÚ_init_buttonsÚ_buttonframeÚ_textwidgetÚfocus)r.   ÚparentÚcfgÚset_cfg_callbacks       r1   Ú__init__zCFGEditor.__init__¯   s  € ØˆŒØˆ?ØˆDŒIˆIå�K¨Ñ,Ô,¨bÑ1Ô1ˆDŒIØ!1ˆÔà01ˆÔ-õ ˜VÑ$Ô$ˆŒ	Ø×ÒÑÔÐà×ÒÑÔÐØÔ×Ò 5¨s¸1ÐÑ=Ô=Ð=Ø×ÒÑÔÐØŒ×Ò %¨f¸QÐÑ?Ô?Ð?Ø×ÒÑÔÐØÔ×Ò H°3¸qÐÑAÔAÐAàÔ×ÒÑ Ô Ð Ð Ð r3   c                 ó¶  — t          | j        ¦  «        x}| _        t          |¦  «        | _        | j                             d¬¦  «         t          |d¬¦  «                             d¬¦  «         t          |d¬¦  «                             d¬¦  «         | j                             d| j         	                    ¦   «          
                    ¦   «         ¦  «         d S )NÚright©rN   zStart Symbol:©ÚtextzProductions:Úleftr   )r   rW   rZ   r   Ú_startr[   r   ÚinsertrT   Ústartr"   ©r.   Úframes     r1   rY   zCFGEditor._init_startframeÆ   s½   € Ý#(¨¬Ñ#3Ô#3Ð3ˆ�Ô Ý˜E‘l”lˆŒØŒ×Ò˜gÐÑ&Ô&Ð&Ýˆe˜/Ð*Ñ*Ô*×/Ò/°WÐ/Ñ=Ô=Ð=Ýˆe˜.Ð)Ñ)Ô)×.Ò.°FÐ.Ñ;Ô;Ð;ØŒ×Ò˜1˜dœiŸošoÑ/Ô/×6Ò6Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r3   c                 óþ  — t          | j        ¦  «        x}| _        t          |d| j        dd¬¦  «                             d¬¦  «         t          |d| j        dd¬¦  «                             d¬¦  «         t          |d| j        dd¬¦  «                             d¬¦  «         t          |d| j        dd¬¦  «                             d¬¦  «         t          |d	| j	        dd¬¦  «                             d
¬¦  «         d S )NÚOkr   )rj   Úcommandr%   Ú	takefocusrk   rh   ÚApplyÚResetÚCancelÚHelprg   )
r   rW   r_   r   Ú_okr[   Ú_applyÚ_resetÚ_cancelÚ_helpro   s     r1   r^   zCFGEditor._init_buttonsÎ   s4  € Ý$)¨$¬)Ñ$4Ô$4Ð4ˆ�Ô!Ýˆu˜4¨¬¸QÈ!ÐLÑLÔL×QÒQØð 	Rñ 	
ô 	
ð 	
õ 	ˆu˜7¨D¬KÀ1ÐPQÐRÑRÔR×WÒWØð 	Xñ 	
ô 	
ð 	
õ 	ˆu˜7¨D¬KÀ1ÐPQÐRÑRÔR×WÒWØð 	Xñ 	
ô 	
ð 	
õ 	Ø˜¨$¬,À!Èqð	
ñ 	
ô 	
ç
Š$�Fˆ$Ñ
Ô
Ð
Ýˆu˜6¨4¬:ÀÈaÐPÑPÔP×UÒUØð 	Vñ 	
ô 	
ð 	
ð 	
ð 	
r3   c                 óú  — | j                              d¦  «         | 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
CFG Editorú<Control-q>z<Alt-q>z<Control-d>z<Alt-x>z<Escape>z<Alt-c>z<Control-o>z<Alt-o>z<Control-a>z<Alt-a>z<Control-r>z<Alt-r>z<Control-h>z<Alt-h>z<F1>)rW   ÚtitleÚbindr|   ry   rz   r{   r}   )r.   s    r1   rX   zCFGEditor._init_bindingsà   s„  € ØŒ	�Š˜Ñ%Ô%Ð%ØŒ	�Š�} d¤lÑ3Ô3Ð3ØŒ	�Š�y $¤,Ñ/Ô/Ð/ØŒ	�Š�} d¤lÑ3Ô3Ð3àŒ	�Š�y $¤,Ñ/Ô/Ð/ØŒ	�Š�z 4¤<Ñ0Ô0Ð0àŒ	�Š�y $¤,Ñ/Ô/Ð/àŒ	�Š�} d¤hÑ/Ô/Ð/ØŒ	�Š�y $¤(Ñ+Ô+Ð+ØŒ	�Š�} d¤kÑ2Ô2Ð2ØŒ	�Š�y $¤+Ñ.Ô.Ð.ØŒ	�Š�} d¤kÑ2Ô2Ð2ØŒ	�Š�y $¤+Ñ.Ô.Ð.ØŒ	�Š�} d¤jÑ1Ô1Ð1ØŒ	�Š�y $¤*Ñ-Ô-Ð-ØŒ	�Š�v˜tœzÑ*Ô*Ð*Ð*Ð*r3   c                 ó¼  — t          | j        ¦  «        | _        t          | j        dd¬¦  «        | _        t          | j        dd¬¦  «        | _        | j                             | j        j        ¬¦  «         | j                             | j        j	        ¬¦  «         | j         
                    d	d
¬¦  «         | j         
                    ddd¬¦  «         | j                             dd¬¦  «         | j                             dd¬¦  «         | j                             dd¬¦  «         d| _        | j                             d| j        ¦  «         | j                             d| j        ¦  «         | j                             d| j        ¦  «         | j                             d| j        ¦  «         | j        fd„}| j                             d|¦  «         d„ | j                             ¦   «         D ¦   «         }t'          t)          |¦  «        dz
  dd¦  «        D ]´}||         d         ||dz
           d         k    r‘d ||         d         v rŒ4d ||dz
           d         v rŒHt+          ||dz
           d         ¦  «         t+          ||         d         ¦  «         ||dz
           d                              ||         d         ¦  «         ||= Œµ|D ]w\  }}t+          ||¦  «         d!|z  }|D ]2}|D ](}t/          |t0          ¦  «        r	|d"|z  z  }Œ |d#|z  z  }Œ)|d$z  }Œ3|d d%…         d&z   }| j                             d'|¦  «         Œx|                      ¦   «          d S )(Nz#e0e0e0rJ   )Ú
backgroundÚexportselectionr   Úvertical)rt   Úorient)Úyscrollcommand)rs   rg   Úy©rN   rO   rQ   rk   )rP   rO   rN   r   r   r   r!   r"   )r$   ÚerrorÚred©rƒ   Ú>z	<<Paste>>z
<KeyPress>z<ButtonPress>c                 óR   — |                      ¦   «                              ¦   «          d S ©N)Útk_focusNextra   )Úer/   s     r1   Úcyclez(CFGEditor._init_prodframe.<locals>.cycle  s&   € Ø×#Ò#Ñ%Ô%×+Ò+Ñ-Ô-Ð-Ð-Ð-r3   z<Tab>c                 ó`   — g | ]+}|                      ¦   «         |                     ¦   «         gf‘Œ,S rD   )r8   r:   )Ú.0Úps     r1   ú
<listcomp>z-CFGEditor._init_prodframe.<locals>.<listcomp>  s/   € ÐMÐMÐM°˜Ÿš™œ !§%¢%¡'¤' Ð+ÐMÐMÐMr3   éÿÿÿÿrD   z%s ->r5   r6   z |éþÿÿÿÚ
Úend)r   rW   r]   r
   r`   r	   Ú_textscrollÚconfigÚsetÚyviewr[   r-   Ú_linenumr�   Ú_replace_arrowsÚ_analyzeÚ_check_analyzerT   ÚproductionsÚrangeÚlenÚprintÚextendr;   r   rm   )	r.   r’   Úprod_tuplesÚir8   ÚrhssÚsr:   r>   s	            r1   r\   zCFGEditor._init_prodframeõ   s�  € Ý ¤	Ñ*Ô*ˆŒõ  ØŒO¨	À1ð
ñ 
ô 
ˆÔõ % T¤_ÀÈ*ÐUÑUÔUˆÔØÔ×Ò¨tÔ/?Ô/CÐÑDÔDÐDØÔ×Ò¨Ô(8Ô(>ÐÑ?Ô?Ð?ØÔ×Ò 7°ÐÑ5Ô5Ð5ØÔ×Ò Q¨V¸&ÐÑAÔAÐAð 	Ô×#Ò# J¸9Ð#ÑEÔEÐEØÔ×#Ò# G°(Ð#Ñ;Ô;Ð;ØÔ×#Ò# G¸Ð#Ñ>Ô>Ð>ð ˆŒð 	Œ	�Š�s˜DÔ0Ñ1Ô1Ð1ð 	Œ	�Š�{ D¤MÑ2Ô2Ð2ØŒ	�Š�| TÔ%8Ñ9Ô9Ð9ØŒ	�Š�¨Ô(;Ñ<Ô<Ð<ð !%Ô 0ð 	.ð 	.ð 	.ð 	.ð 	Ô×Ò˜g uÑ-Ô-Ð-àMÐM°T´Y×5JÒ5JÑ5LÔ5LÐMÑMÔMˆÝ•s˜;Ñ'Ô'¨!Ñ+¨Q°Ñ3Ô3ð 		#ð 		#ˆAØ˜1Œ~˜aÔ  K°°A±Ô$6°qÔ$9Ò9Ð9Ø˜ Qœ¨Ô*Ð*Ð*ØØ˜ Q¨¡UÔ+¨AÔ.Ð.Ð.ØÝ�k ! a¡%Ô(¨Ô+Ñ,Ô,Ð,Ý�k !”n QÔ'Ñ(Ô(Ð(Ø˜A ™EÔ" 1Ô%×,Ò,¨[¸¬^¸AÔ->Ñ?Ô?Ð?Ø �Nøà$ð 	.ð 	.‰IˆC�Ý�#�tÑÔÐØ˜#‘ˆAØð ð �Øð )ð )�CÝ! #¥{Ñ3Ô3ð )Ø˜U S™[Ñ(˜˜à˜U S™[Ñ(˜˜Ø�T‘	��Ø�#�2�#”˜‘ˆAØÔ×#Ò# E¨1Ñ-Ô-Ð-Ð-à�Š‰Œˆˆˆr3   c                 ó’   — d|z  }d|z  }| j                              ¦   «         D ]"}|dvr| j                              |||¦  «         Œ#dS )z‘
        Remove all tags (except ``arrow`` and ``sel``) from the given
        line of the text widget used for editing the productions.
        ú%d.0ú%d.end)r!   ÚselN)r`   Ú	tag_namesÚ
tag_remove)r.   Úlinenumrn   rš   Útags        r1   Ú_clear_tagszCFGEditor._clear_tagsN  sh   € ð
 ˜Ñ ˆØ˜Ñ ˆØÔ#×-Ò-Ñ/Ô/ð 	=ð 	=ˆCØÐ*Ð*Ð*ØÔ ×+Ò+¨C°¸Ñ<Ô<Ð<øð	=ð 	=r3   c                 ó  — t          | j                             d¦  «                             d¦  «        d         ¦  «        }|| j        k    r8|                      |¦  «         |                      | j        ¦  «         || _        dS dS )z·
        Check if we've moved to a new line.  If we have, then remove
        all colorization from the line we moved to, and re-colorize
        the line that we moved from.
        rm   ú.r   N)Úintr`   ÚindexÚsplitrŸ   r´   Ú_analyze_line)r.   r‘   r²   s      r1   r¢   zCFGEditor._check_analyzeY  s   € õ �dÔ&×,Ò,¨XÑ6Ô6×<Ò<¸SÑAÔAÀ!ÔDÑEÔEˆØ�d”mÒ#Ð#Ø×Ò˜WÑ%Ô%Ð%Ø×Ò˜tœ}Ñ-Ô-Ð-Ø#ˆDŒMˆMˆMð $Ð#r3   c                 ó¢  — d}	 | j                              d|d¦  «        }|dk    rn[| j                              ||dz   ¦  «         | j                              || j        d¦  «         | j                              |d¦  «         Œ~d}	 | j                              | j        |d	z   d¦  «        }|dk    rd
S | j                              d||d	z   ¦  «         ŒL)zÃ
        Replace any ``'->'`` text strings with arrows (char \256, in
        symbol font).  This searches the whole buffer, but is fast
        enough to be done anytime they press '>'.
        ú1.0Tú->z	end+1charÚ z+2charr!   ú	z+1charN)r`   ÚsearchÚdeleterm   r9   Útag_add)r.   r‘   r!   s      r1   r    zCFGEditor._replace_arrowse  sï   € ð ˆð	1ØÔ$×+Ò+¨D°%¸ÑEÔEˆEØ˜Š{ˆ{ØØÔ×#Ò# E¨5°8Ñ+;Ñ<Ô<Ð<ØÔ×#Ò# E¨4¬:°wÑ?Ô?Ð?ØÔ×#Ò# E¨4Ñ0Ô0Ð0ð	1ð ˆð	GØÔ$×+Ò+¨D¬J¸ÀÑ8HÈ+ÑVÔVˆEØ˜Š{ˆ{Ø�ØÔ×$Ò$ W¨e°U¸XÑ5EÑFÔFÐFð		Gr3   c                 ó®  — |                      ¦   «         d         dv rd}ng|                      ¦   «         d| j        fv rd}nGd|                      ¦   «         z   }|| j                             ¦   «         vr|                      |¦  «         d||                     ¦   «         fz  }d||                     ¦   «         fz  }| j                             |||¦  «         dS )	zí
        Given a line number and a regexp match for a token on that
        line, colorize the token.  Note that the regexp match gives us
        the token's text, start index (on the line), and end index (on
        the line).
        r   z'"r   r½   r!   Únonterminal_ú%d.%dN)Úgroupr9   r`   r°   Ú_init_nonterminal_tagrn   rš   rÂ   )r.   Úmatchr²   r³   rn   rš   s         r1   Ú_analyze_tokenzCFGEditor._analyze_token{  sÕ   € ð �;Š;‰=Œ=˜Ô˜uÐ$Ð$ØˆCˆCØ�[Š[‰]Œ]˜t T¤ZÐ0Ð0Ð0ØˆCˆCð
 ! 5§;¢;¡=¤=Ñ0ˆCØ˜$Ô*×4Ò4Ñ6Ô6Ð6Ð6Ø×*Ò*¨3Ñ/Ô/Ð/à˜7 E§K¢K¡M¤MÐ2Ñ2ˆØ˜ %§)¢)¡+¤+Ð.Ñ.ˆØÔ× Ò   e¨SÑ1Ô1Ð1Ð1Ð1r3   r'   c                 ó  — | j                              ||t          j        ¬¦  «         | j        sd S | j         |fd„}| j         |fd„}| j                              |d|¦  «         | j                              |d|¦  «         d S )Nr+   c                 ó4   — |                      |d¬¦  «         d S )Nz#80ff80rŒ   r,   ©r‘   r/   r³   s      r1   Úenterz.CFGEditor._init_nonterminal_tag.<locals>.enter˜  s!   € Ø×!Ò! #°)Ð!Ñ<Ô<Ð<Ð<Ð<r3   c                 ó4   — |                      |d¬¦  «         d S )Nr¾   rŒ   r,   rÌ   s      r1   Úleavez.CFGEditor._init_nonterminal_tag.<locals>.leave›  s!   € Ø×!Ò! #°"Ð!Ñ5Ô5Ð5Ð5Ð5r3   z<Enter>z<Leave>)r`   r-   rF   Ú_BOLDrV   Útag_bind)r.   r³   r    rÍ   rÏ   s        r1   rÇ   zCFGEditor._init_nonterminal_tag“  sª   € ØÔ×#Ò# C°JÅYÄ_Ð#ÑUÔUÐUØÔ4ð 	ØˆFà $Ô 0°cð 	=ð 	=ð 	=ð 	=ð !%Ô 0°cð 	6ð 	6ð 	6ð 	6ð 	Ô×!Ò! # y°%Ñ8Ô8Ð8ØÔ×!Ò! # y°%Ñ8Ô8Ð8Ð8Ð8r3   c                 ó”  — |                       |¦  «         | j                             t          |¦  «        dz   t          |¦  «        dz   ¦  «        }t          j                             |¦  «        r(| |fd„}t          j                             ||¦  «         dS | 	                    ¦   «         dk    r|  
                    ||¦  «         dS dS )z(
        Colorize a given line.
        z.0z.endc                 ó2   — |                      | |¦  «         dS )Nr¾   )rÉ   )rÈ   r.   r²   s      r1   Úanalyze_tokenz.CFGEditor._analyze_line.<locals>.analyze_token¯  s   € Ø×#Ò# E¨7Ñ3Ô3Ð3Ø�rr3   r¾   N)r´   r`   ÚgetÚreprrF   Ú_PRODUCTION_RErÈ   Ú	_TOKEN_REÚsubÚstripÚ_mark_error)r.   r²   ÚlinerÔ   s       r1   rº   zCFGEditor._analyze_line¡  sÖ   € ð
 	×Ò˜Ñ!Ô!Ð!ð Ô×#Ò#¥D¨¡M¤M°DÑ$8½$¸w¹-¼-È&Ñ:PÑQÔQˆõ Ô#×)Ò)¨$Ñ/Ô/ð 
	,ð +/¸ð ð ð ð õ Ô×#Ò# M°4Ñ8Ô8Ð8Ð8Ð8Ø�ZŠZ‰\Œ\˜RÒÐà×Ò˜W dÑ+Ô+Ð+Ð+Ð+ð  Ðr3   c                 óš  — t           j                             |¦  «        }|sd|z  }d|z  }n\t           j                             |¦  «        sd|z  }d||                     ¦   «         fz  }nd||                     ¦   «         fz  }d|z  }| j                             |d|¦  «        r
d|z  }d|z  }| j         	                    d||¦  «         dS )z:
        Mark the location of an error in a line.
        r­   r®   rÅ   z==rŠ   N)
rF   Ú	_ARROW_RErÀ   Ú_LHS_RErÈ   rn   rš   r`   ÚcomparerÂ   )r.   r²   rÜ   Ú
arrowmatchrn   rš   s         r1   rÛ   zCFGEditor._mark_error¸  sñ   € õ Ô(×/Ò/°Ñ5Ô5ˆ
Øð 	%à˜WÑ$ˆEØ˜WÑ$ˆCˆCÝÔ"×(Ò(¨Ñ.Ô.ð 	%à˜WÑ$ˆEØ˜W j×&6Ò&6Ñ&8Ô&8Ð9Ñ9ˆCˆCð ˜w¨
¯ªÑ(8Ô(8Ð9Ñ9ˆEØ˜WÑ$ˆCð Ô×#Ò# E¨4°Ñ5Ô5ð 	%Ø˜WÑ$ˆEØ˜WÑ$ˆCØÔ× Ò  ¨%°Ñ5Ô5Ð5Ð5Ð5r3   c                 ó  — |                       ¦   «          t          | j                             d¦  «                             d¦  «        d         ¦  «        }t          d|dz   ¦  «        D ]}|                      |¦  «         ŒdS )zM
        Replace ``->`` with arrows, and colorize the entire buffer.
        rš   r¶   r   rJ   N)r    r·   r`   r¸   r¹   r¤   rº   )r.   r‘   Únumlinesr²   s       r1   r¡   zCFGEditor._analyzeÐ  s…   € ð 	×ÒÑÔÐÝ�tÔ'×-Ò-¨eÑ4Ô4×:Ò:¸3Ñ?Ô?ÀÔBÑCÔCˆÝ˜Q ¨1¡Ñ-Ô-ð 	(ð 	(ˆGØ×Ò˜wÑ'Ô'Ð'Ð'ð	(ð 	(r3   c                 ó0  — g }| j                              dd¦  «        }t          j        | j        d|¦  «        }t          j        dd|¦  «        }|                     d¦  «        }|D ]/}|                     ¦   «         }|dk    rŒ|t          |¦  «        z  }Œ0|S )zo
        Parse the current contents of the textwidget buffer, to create
        a list of productions.
        r¼   rš   r½   r¿   Ú r™   r¾   )r`   rÕ   ÚrerÙ   r9   r¹   rÚ   r   )r.   r£   rj   ÚlinesrÜ   s        r1   Ú_parse_productionszCFGEditor._parse_productionsÙ  s£   € ð
 ˆð Ô×#Ò# E¨5Ñ1Ô1ˆÝŒv�d”j $¨Ñ-Ô-ˆÝŒv�d˜C Ñ&Ô&ˆØ—
’
˜4Ñ Ô ˆð ð 	6ð 	6ˆDØ—:’:‘<”<ˆDØ�rŠzˆzØØÕ/°Ñ5Ô5Ñ5ˆKˆKð" Ðr3   c                 óX   — | j         €d S | j                              ¦   «          d | _         d S r�   ©rW   Údestroy©r.   r‘   s     r1   Ú_destroyzCFGEditor._destroyþ  s.   € ØŒ9ÐØˆFØŒ	×ÒÑÔÐØˆŒ	ˆ	ˆ	r3   c                 óV   — |                       ¦   «          |                      ¦   «          d S r�   )rz   rí   rì   s     r1   ry   zCFGEditor._ok  s    € Ø�Š‰ŒˆØ�Š‰Œˆˆˆr3   c                 óÖ   — |                       ¦   «         }t          | j                             ¦   «         ¦  «        }t	          ||¦  «        }| j        �|                      |¦  «         d S d S r�   )rè   r   rl   rÕ   r   rU   )r.   r‘   r£   rn   rc   s        r1   rz   zCFGEditor._apply  sf   € Ø×-Ò-Ñ/Ô/ˆÝ˜DœKŸOšOÑ-Ô-Ñ.Ô.ˆÝ�%˜Ñ%Ô%ˆØÔ!Ð-Ø×"Ò" 3Ñ'Ô'Ð'Ð'Ð'ð .Ð-r3   c                 ó  — | j                              dd¦  «         | j                             ¦   «         D ] }| j                              dd|z  ¦  «         Œ!|                      ¦   «          | j        �|                      | j        ¦  «         d S d S )Nr¼   rš   z%s
)r`   rÁ   rT   r£   rm   r¡   rU   )r.   r‘   Ú
productions      r1   r{   zCFGEditor._reset  s•   € ØÔ×Ò  uÑ-Ô-Ð-Øœ)×/Ò/Ñ1Ô1ð 	@ð 	@ˆJØÔ×#Ò# E¨6°JÑ+>Ñ?Ô?Ð?Ð?Ø�Š‰ŒˆØÔ!Ð-Ø×"Ò" 4¤9Ñ-Ô-Ð-Ð-Ð-ð .Ð-r3   c                 óh   — 	 |                       ¦   «          n#  Y nxY w|                      ¦   «          d S r�   )r{   rí   rì   s     r1   r|   zCFGEditor._cancel  s5   € ð	Ø�KŠK‰MŒMˆMˆMøð	ØˆDøøøØ�Š‰Œˆˆˆs   ‚ —c                 óÖ   — 	 t          | j        dt                               ¦   «         dd¬¦  «         d S #  t          | j        dt                               ¦   «         d¬¦  «         Y d S xY w)NzHelp: Chart Parser DemoéK   Úfixed)Úwidthr$   ©rö   )r   rS   Ú_CFGEditor_HELPrÚ   rì   s     r1   r}   zCFGEditor._help  sŽ   € ð	ÝØ”Ø)Ý ×'Ò'Ñ)Ô)ØØðñ ô ð ð ð øð	ÝØ”Ø)Ý ×'Ò'Ñ)Ô)Øð	ñ ô ð ð ð ð øøøs	   ‚04 ´1A()NN)r'   )"r@   rA   rB   Ú__doc__r   rC   r9   ræ   Úcompilerß   rÞ   r×   rØ   rÐ   re   rY   r^   rX   r\   r´   r¢   r    rÉ   rÇ   rº   rÛ   r¡   rè   rí   ry   rz   r{   r|   r}   rD   r3   r1   rF   rF   •   sö  € € € € € ðð ð Ô  Ô.€EØˆbŒjÐ-°Ñ5¸Ñ<Ñ=Ô=€GØ�”
˜;¨Ñ.°Ñ9Ñ:Ô:€IØ�R”Zð	à
ñ	ð ñ	ð 1ñ		1ñô €Nð �”
Ð<¸uÑDÀsÑJÑKÔK€IØ&€Eð!ð !ð !ð !ð.:ð :ð :ð
ð 
ð 
ð$+ð +ð +ð*>ð >ð >ðr	=ð 	=ð 	=ð
$ð 
$ð 
$ðGð Gð Gð,2ð 2ð 2ð09ð 9ð 9ð 9ð,ð ,ð ,ð.6ð 6ð 6ð0(ð (ð (ð#ð #ð #ðJð ð ðð ð ð(ð (ð (ð.ð .ð .ðð ð ðð ð ð ð r3   rF   c                   ó^   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd„Zd„ Zd„ Zd„ Zd
S )ÚCFGDemoc                 ó^  — || _         || _        t          ¦   «         | _        | j                             d¦  «         t          | j        ¦  «        | _        | j                             d¦  «         |                      | j        ¦  «         t          | j        ¦  «        }| 
                    ddd¬¦  «         |                      | j        ¦  «         |                      | j        ¦  «         |                      |¦  «         |                      |¦  «         |                      | j        ¦  «         d S )NzContext Free Grammar Demoé   rk   rˆ   r   rM   )Ú_grammarÚ_textr   rW   r€   r   Ú_sizer�   rX   r   r[   Ú_init_menubarr^   Ú_init_grammarÚ_init_treeletÚ_init_workspace)r.   Úgrammarrj   Úframe1s       r1   re   zCFGDemo.__init__7  s
  € ØˆŒØˆŒ
õ ‘D”DˆŒ	ØŒ	�ŠÐ3Ñ4Ô4Ð4õ ˜DœIÑ&Ô&ˆŒ
ØŒ
�Š�rÑÔÐð 	×Ò˜DœIÑ&Ô&Ð&õ �t”yÑ!Ô!ˆØ�Š˜ c°!ˆÑ4Ô4Ð4Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜6Ñ"Ô"Ð"Ø×Ò˜6Ñ"Ô"Ð"Ø×Ò˜TœYÑ'Ô'Ð'Ð'Ð'r3   c                 ó<   — |                      d| j        ¦  «         d S )Nr   )r�   rë   )r.   rK   s     r1   rX   zCFGDemo._init_bindingsS  s   € Ø�Š� ¤Ñ-Ô-Ð-Ð-Ð-r3   c                 ó   — d S r�   rD   ©r.   rb   s     r1   r  zCFGDemo._init_menubarV  ó   € Øˆr3   c                 ó   — d S r�   rD   r
  s     r1   r^   zCFGDemo._init_buttonsY  r  r3   c                 ó*  — t          || j        d¬¦  «        | _        | j                             ddd¬¦  «         | j                             ¦   «          | j                             d| j        ¦  «         | j                             d| j        ¦  «         d S )	Né   r÷   rK   rQ   rJ   rM   ÚselectÚmove)r   rÿ   Ú	_prodlistr[   ra   Úadd_callbackÚ_selectprod_cbr
  s     r1   r  zCFGDemo._init_grammar\  s‡   € Ý'¨°´ÀRÐHÑHÔHˆŒØŒ×Ò ¨V¸AÐÑ>Ô>Ð>ØŒ×ÒÑÔÐØŒ×#Ò# H¨dÔ.AÑBÔBÐBØŒ×#Ò# F¨DÔ,?Ñ@Ô@Ð@Ð@Ð@r3   c                 óx   — t          |d¬¦  «        | _        | j                             dd¬¦  «         d | _        d S )NÚwhiterŒ   rR   rL   r‰   )r   Ú_treelet_canvasr[   Ú_treeletr
  s     r1   r  zCFGDemo._init_treeletc  s>   € Ý% f¸ÐAÑAÔAˆÔØÔ×!Ò! x°cÐ!Ñ:Ô:Ð:ØˆŒˆˆr3   c                 ó¢   — t          |d¬¦  «        | _        | j                             ddd¬¦  «         d | _        |                      ¦   «          d S )Nr  rŒ   rg   rQ   rJ   rM   )r   Ú
_workspacer[   Ú_treeÚreset_workspacer
  s     r1   r  zCFGDemo._init_workspaceh  sR   € Ý% f¸ÐAÑAÔAˆŒØŒ×Ò '°¸qÐÑAÔAÐAØˆŒ
Ø×ÒÑÔÐÐÐr3   c           	      óv  — | j                              ¦   «         }t          | j                             ¦   «         ¦  «        }d|dz    df}d|dz    f}| j        �| j                              | j        ¦  «         | j                             ¦   «          	                    ¦   «         }t          |||d¬¦  «        }g }| j        D ](}|                     t          |||d¬¦  «        ¦  «         Œ)t          |||d¬¦  «        | _        | j                              | j        ¦  «         |D ]}	|	                     d	d
¦  «         Œd S )Nr)   é   r*   é   rJ   )r$   Ú	draggabler  )Úcolorr   éd   )r  Úcanvasr·   r  rÕ   r  Úremove_widgetrÿ   rn   r"   r   r   r7   r   Ú
add_widgetr  )
r.   ÚcÚfontsizeÚ	node_fontÚ	leaf_fontrn   ÚrootnodeÚleavesÚwordÚleafs
             r1   r  zCFGDemo.reset_workspacer  sO  € ØŒO×"Ò"Ñ$Ô$ˆÝ�t”z—~’~Ñ'Ô'Ñ(Ô(ˆØ  H¨q¡L /°6Ð:ˆ	Ø  H¨q¡L /Ð2ˆ	ð Œ:Ð!ØŒO×)Ò)¨$¬*Ñ5Ô5Ð5ð ”×#Ò#Ñ%Ô%×,Ò,Ñ.Ô.ˆÝ˜a ¨YÀ!ÐDÑDÔDˆð ˆØ”Jð 	Lð 	LˆDØ�MŠM�* Q¨°9ÈÐJÑJÔJÑKÔKÐKÐKõ ' q¨(°FÀ'ÐJÑJÔJˆŒ
ð 	Œ×"Ò" 4¤:Ñ.Ô.Ð.ð ð 	ð 	ˆDØ�IŠI�a˜ÑÔÐÐð	ð 	r3   c                 ó   — d S r�   rD   )r.   rñ   s     r1   Úworkspace_markprodzCFGDemo.workspace_markprod’  r  r3   Nc                 óÐ  — |€| j         }t          t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        z
  ¦  «        D �]
}|d|f         dk    r| j         t          |                     ¦   «         ¦  «        D ]À\  }}|                     ¦   «         ||z            }t          |t          ¦  «        rEt          |t          ¦  «        r0|j
        |                     ¦   «                              ¦   «         k    rŒ|t          |t          ¦  «        r.t          |t          ¦  «        r||                     ¦   «         k    rŒ¿ nt          d|¦  «         �Œd S )Nr   r  zMATCH AT)r  r¤   r¥   Úsubtreesr:   Ú_markproductionÚ	enumerater;   r   r   r"   Úlabelrj   Ústrr   r¦   )r.   ÚprodÚtreer©   ÚjÚnodeÚwidgets          r1   r1  zCFGDemo._markproduction•  sG  € Øˆ<Ø”:ˆDÝ•s˜4Ÿ=š=™?œ?Ñ+Ô+­c°$·(²(±*´*©o¬oÑ=Ñ>Ô>ð 	%ñ 	%ˆAØ�G˜Q�JÔ 7Ò*Ð*ØÔ$Ð$å$ T§X¢X¡Z¤ZÑ0Ô0ð %ð %‘��4ØŸš™œ¨¨Q©Ô/�å˜t¥[Ñ1Ô1ðå" 6Õ+<Ñ=Ô=ðð œ v§|¢|¡~¤~×':Ò':Ñ'<Ô'<Ò<Ð<àå˜t¥SÑ)Ô)ðå" 6­:Ñ6Ô6ðð  §¢¡¤Ò-Ð-àà�Eõ �j !Ñ$Ô$Ð$ùð-	%ð 	%r3   c                 óJ  — | j         }| j                             |¦  «         | j        �| j                             ¦   «          |                     ¦   «         }t          |¦  «        D ])\  }}t          |t          ¦  «        rt          |¦  «        }Œ*t          | 
                    ¦   «                              ¦   «         g|¢R Ž }t          | j                             ¦   «         ¦  «        }d|dz    df}d|dz    f}	t          ||||	¬¦  «        | _        d| j        d<   | j                             ¦   «         \  }
}}}t          |d         ¦  «        t          |d	         ¦  «        }}| j                             ||
z
  |z
  dz  ||z
  |z
  dz  ¦  «         |                      |¦  «         d S )
Nr)   r  r*   r  )r'  r(  rJ   r  rö   Úheight)r  r  Ú	highlightr  rë   r:   r2  r;   r   r   r8   r"   r·   r  rÕ   r   Úbboxr  r1  )r.   rñ   r"  r:   r©   r>   r6  r&  r'  r(  Úx1Úy1Úx2Úy2ÚwÚhs                   r1   r  zCFGDemo._selectprod_cb´  s§  € ØÔ%ˆàŒ× Ò  Ñ,Ô,Ð,ØŒ=Ð$ØŒM×!Ò!Ñ#Ô#Ð#ð �nŠnÑÔˆÝ! #™œð 	 ð 	 ‰HˆQ�Ý˜#�{Ñ+Ô+ð  Ý˜3‘i”i�øÝ�J—N’NÑ$Ô$×+Ò+Ñ-Ô-Ð4°Ð4Ð4Ð4ˆõ �t”z—~’~Ñ'Ô'Ñ(Ô(ˆØ  H¨q¡L /°6Ð:ˆ	Ø  H¨q¡L /Ð2ˆ	Ý+Ø�D I¸ð
ñ 
ô 
ˆŒð &'ˆŒ�kÑ"ð  œ=×-Ò-Ñ/Ô/ÑˆˆR��RÝ�6˜'”?Ñ#Ô#¥S¨°Ô)9Ñ%:Ô%:ˆ1ˆØŒ×Ò˜A ™F R™K¨1Ñ,¨q°2©v¸©{¸aÑ.?Ñ@Ô@Ð@ð 	×Ò˜ZÑ(Ô(Ð(Ð(Ð(r3   c                 ó8   — | j                              ¦   «          d S r�   rê   )r.   Úargss     r1   rë   zCFGDemo.destroyÓ  s   € ØŒ	×ÒÑÔÐÐÐr3   c                 ó*   —  | j         j        |i |¤Ž d S r�   )rW   Úmainloop)r.   rE  Úkwargss      r1   rG  zCFGDemo.mainloopÖ  s"   € ØˆŒ	Ô˜DÐ+ FÐ+Ð+Ð+Ð+Ð+r3   r�   )r@   rA   rB   re   rX   r  r^   r  r  r  r  r.  r1  r  rë   rG  rD   r3   r1   rü   rü   6  sà   € € € € € ð(ð (ð (ð8.ð .ð .ðð ð ðð ð ðAð Að Aðð ð ð
ð ð ðð ð ð@ð ð ð%ð %ð %ð %ð>)ð )ð )ð>ð ð ð,ð ,ð ,ð ,ð ,r3   rü   c                  óè  ‡— ddl m} mŠm} d}ˆfd„ |j        ¦   «         D ¦   «         \	  }}}}}}}	}
} ||||g¦  «         ||||g¦  «         ||||g¦  «         ||||g¦  «         |||
||g¦  «         |||
|g¦  «         ||||g¦  «         ||g ¦  «         ||dd|g¦  «         ||dg¦  «         ||dg¦  «         ||d	g¦  «         ||d
g¦  «         ||
dg¦  «         ||dg¦  «         ||dg¦  «         ||dg¦  «         ||dg¦  «         ||dg¦  «         ||dg¦  «        f} | ||¦  «        }d                     ¦   «         }t          ||¦  «        }|                     ¦   «          d S )Nr   )r   r   Ú
ProductionúS VP NP PP P N Name V Detc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r�   rD   ©r”   r«   r   s     €r1   ú	<genexpr>zdemo2.<locals>.<genexpr>Þ  ó+   øè è € Ð*XÐ*X¸a¨;¨;°q©>¬>Ð*XÐ*XÐ*XÐ*XÐ*XÐ*Xr3   ÚupÚoverÚIÚtheÚaÚmanÚsawÚinÚwithÚparkÚdogÚstatueÚmyzI saw a man in the park)Únltkr   r   rJ  r¹   rü   rG  )r   rJ  r   rI   ÚVPÚNPÚPPÚPÚNÚNameÚVÚDetr£   r  rj   Údr   s                   @r1   Údemo2rg  Ú  s  ø€ Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1à.€LØ*XÐ*XÐ*XÐ*XÐCUÀ<ÔCUÑCWÔCWÐ*XÑ*XÔ*XÑ'€QˆˆB��A�q˜$  3ð 	ˆ
�1�r˜2�hÑÔØˆ
�2˜˜Q�xÑ Ô Øˆ
�2˜˜B�xÑ Ô Øˆ
�2˜˜B�xÑ Ô Øˆ
�2˜˜2˜r�{Ñ#Ô#Øˆ
�2˜˜2�wÑÔØˆ
�2˜˜2�wÑÔØˆ
�2�rÑÔØˆ
�2˜˜f bÐ)Ñ*Ô*àˆ
�2˜�uÑÔØˆ
�3˜˜Ñ Ô Øˆ
�3˜˜ÑÔØˆ
�1�u�gÑÔØˆ
�1�u�gÑÔØˆ
�1�t�fÑÔØˆ
�1�v�hÑÔØˆ
�1�v�hÑÔØˆ
�1�u�gÑÔØˆ
�1�x�jÑ!Ô!Øˆ
�3˜˜ÑÔð-€Kð0 ˆc�!�[Ñ!Ô!€Gà$×*Ò*Ñ,Ô,€DÝ�˜ÑÔ€AØ‡J‚J�L„L€L€L€Lr3   c            	      óŠ  ‡— ddl m} mŠ d}ˆfd„ |j        ¦   «         D ¦   «         \	  }}}}}}}}	}
 | j        d¦  «        }d„ }t          ¦   «         }t          |||¦  «        }t          |d¬¦  «                             ¦   «          t          |d	|j
        ¬
¦  «                             ¦   «          |                     ¦   «          d S )Nr   )r   r   rK  c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r�   rD   rM  s     €r1   rN  zdemo.<locals>.<genexpr>  rO  r3   a+  
    S -> NP VP
    PP -> P NP
    NP -> Det N
    NP -> NP PP
    VP -> V NP
    VP -> VP PP
    Det -> 'a'
    Det -> 'the'
    Det -> 'my'
    NP -> 'I'
    N -> 'dog'
    N -> 'man'
    N -> 'park'
    N -> 'statue'
    V -> 'saw'
    P -> 'in'
    P -> 'up'
    P -> 'over'
    P -> 'with'
    c                 ó$   — t          | ¦  «         d S r�   )r¦   )r  s    r1   Úcbzdemo.<locals>.cb!  s   € Ýˆg‰Œˆˆˆr3   z
Testing CFG Editor
ri   ÚQuit)rj   rs   )r]  r   r   r¹   Ú
fromstringr   rF   r   r[   r   rë   rG  )r   r   rI   r^  r_  r`  ra  rb  rc  rd  re  r  rk  rK   Úeditorr   s                  @r1   Údemoro    sï   ø€ Ø%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à.€LØ*XÐ*XÐ*XÐ*XÐCUÀ<ÔCUÑCWÔCWÐ*XÑ*XÔ*XÑ'€QˆˆB��A�q˜$  3àˆcŒnð	ñô €Gð0ð ð õ ‰$Œ$€CÝ�s˜G RÑ(Ô(€FÝ	ˆ#Ð,Ð-Ñ-Ô-×2Ò2Ñ4Ô4Ð4Ý
ˆ3�V S¤[Ð1Ñ1Ô1×6Ò6Ñ8Ô8Ð8Ø‡L‚L�N„N€N€N€Nr3   c                  óÚ  — ddl m}  t          d¦  «        \	  }}}}}}}}}	 | |||g¦  «         | ||	|g¦  «         | |||g¦  «         | |||g¦  «         | ||||g¦  «         | |||g¦  «         | |||g¦  «         | |g ¦  «         | |dd|g¦  «         | |dg¦  «         | |	dg¦  «         | |	dg¦  «         | |d	g¦  «         | |d
g¦  «         | |dg¦  «         | |dg¦  «         | |dg¦  «         | |dg¦  «         | |dg¦  «         | |	dg¦  «        f}
t          ¦   «         }|fd„}|                     d|¦  «         t          ||
¦  «        }|                     dd¬¦  «         |                     d|j        ¦  «         |                     d|j        ¦  «         | 	                    ¦   «          | 
                    |
d         ¦  «         | 
                    |
d         ¦  «         d S )Nr   )rJ  z!S, VP, NP, PP, P, N, Name, V, DetrP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  c                 ó.   — |                      ¦   «          d S r�   )rë   )r‘   Úts     r1   rë   zdemo3.<locals>.destroyM  s   € Ø	�	Š	‰Œˆˆˆr3   ÚqrJ   rQ   )rP   rO   r  r  r  é   )r]  rJ  r   r   r�   r   r[   r  Úmarkonlyra   Úmark)rJ  rI   r^  r_  r`  ra  rb  rc  rd  re  r£   rr  rë   r•   s                 r1   Údemo3rw  +  sq  € ØÐÐÐÐÐå*6Ø+ñ+ô +Ñ'€QˆˆB��A�q˜$  3ð 	ˆ
�1�r˜2�hÑÔØˆ
�2˜˜Q�xÑ Ô Øˆ
�2˜˜B�xÑ Ô Øˆ
�2˜˜B�xÑ Ô Øˆ
�2˜˜2˜r�{Ñ#Ô#Øˆ
�2˜˜2�wÑÔØˆ
�2˜˜2�wÑÔØˆ
�2�rÑÔØˆ
�2˜˜f bÐ)Ñ*Ô*àˆ
�2˜�uÑÔØˆ
�3˜˜Ñ Ô Øˆ
�3˜˜ÑÔØˆ
�1�u�gÑÔØˆ
�1�u�gÑÔØˆ
�1�t�fÑÔØˆ
�1�v�hÑÔØˆ
�1�v�hÑÔØˆ
�1�u�gÑÔØˆ
�1�x�jÑ!Ô!Øˆ
�3˜˜ÑÔð-€Kõ2 	‰Œ€Aàð ð ð ð ð ‡F‚Fˆ3�ÑÔÐÝ�q˜+Ñ&Ô&€AØ‡F‚F�!˜&€FÑ!Ô!Ð!Ø‡N‚N�8˜QœZÑ(Ô(Ð(Ø‡N‚N�6˜1œ:Ñ&Ô&Ð&Ø‡G‚G�I„I€IØ‡F‚Fˆ;�qŒ>ÑÔÐØ‡F‚Fˆ;�qŒ>ÑÔÐÐÐr3   Ú__main__)%rù   ræ   Útkinterr   r   r   r   r   r   r	   r
   r   r   Únltk.draw.treer   r   Únltk.draw.utilr   r   r   r   r   Únltk.grammarr   r   r   r   Ú	nltk.treer   r   rø   rF   rü   rg  ro  rw  r@   rD   r3   r1   ú<module>r~     s  ððð ðR 
€	€	€	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ Ð Ð Ð Ð Ð ðð ð ð ð �]ñ ô ð ð4)€ðXYð Yð Yð Yð Yñ Yô Yð YðBa,ð a,ð a,ð a,ð a,ñ a,ô a,ð a,ðH!ð !ð !ðR%ð %ð %ðP,ð ,ð ,ð^ ˆzÒÐØ€D�F„F€F€F€Fð Ðr3   