
    
`iy                        d Z ddlZddlZddlZddlZddlmZmZm	Z	 dZ
 ee
dd          Zd Z e	d	
           G d de                      Zd ZddZddZd Zedk    r e            Z eej                  dk    r*e                    ej                    ej        d           e                                Z e eej
        ej        ej        ej                             dS dS )z!Converts Nearley grammars to Lark    N)LarkTransformerv_argsa  
    start: (ruledef|directive)+

    directive: "@" NAME (STRING|NAME)
             | "@" JS  -> js_code
    ruledef: NAME "->" expansions
           | NAME REGEXP "->" expansions -> macro
    expansions: expansion ("|" expansion)*

    expansion: expr+ js

    ?expr: item (":" /[+*?]/)?

    ?item: rule|string|regexp|null
         | "(" expansions ")"

    rule: NAME
    string: STRING
    regexp: REGEXP
    null: "null"
    JS: /{%.*?%}/s
    js: JS?

    NAME: /[a-zA-Z_$]\w*/
    COMMENT: /#[^\n]*/
    REGEXP: /\[.*?\]/

    STRING: _STRING "i"?

    %import common.ESCAPED_STRING -> _STRING
    %import common.WS
    %ignore WS
    %ignore COMMENT

    earleybasic)parserlexerc                     ddd                     | |           } d|                     dd                                          z   S )N	_ws_maybe_ws)___n_$
__DOLLAR__)getreplacelower)names    f/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lark/tools/nearley.py_get_rulenamer   1   sD    E**..tT::D$,,sL11779999    T)inlinec                   V    e 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S )NearleyToLarkc                 >    d| _         i | _        i | _        i | _        d S )Nr   )_countextra_rulesextra_rules_revalias_js_codeselfs    r   __init__zNearleyToLark.__init__7   s'    !r   c                 N    d| j         z  }| xj         dz  c_         || j        |<   |S )Nzalias_%d   )r   r    )r"   coder   s      r   _new_functionzNearleyToLark._new_function=   s0    DK'q#'4 r   c                     || j         v r| j         |         S dt          | j                  z  }|| j        vsJ || j        |<   || j         |<   |S )Nzxrule_%d)r   lenr   )r"   ruler   s      r   _extra_rulezNearleyToLark._extra_ruleD   sf    4''''--C 01114+++++!%%)T"r   c                      t          |          S Nr   )r"   r   s     r   r*   zNearleyToLark.ruleN   s    T"""r   c                 ,    dt          |          d|S )N!z: r.   )r"   r   expss      r   ruledefzNearleyToLark.ruledefQ   s     )$////66r   c                 <    d|d|}|                      |          S )N()r+   )r"   itemopr*   s       r   exprzNearleyToLark.exprT   s(     44$%%%r   c                     d|z  S )Nz/%s/ )r"   rs     r   regexpzNearleyToLark.regexpX   s    zr   c                     dS )N r;   r!   s    r   nullzNearleyToLark.null[   s    rr   c                 ,    |                      |          S r-   r6   )r"   ss     r   stringzNearleyToLark.string^   s    """r   c                     |d d         |d         }}|j         r,|j         \  }|dd         }d|                     |          z   }nd}d                    |          |z   S )N   z-> r?    )childrenr'   join)r"   xjsjs_codealiass        r   	expansionzNearleyToLark.expansiona   sk    #2#"2; 	{IGadmGD..w777EEExx{{U""r   c                 2    dd                     |          z  S )Nz%sz
    |)rJ   )r"   rK   s     r   
expansionszNearleyToLark.expansionsk   s    y~~a(())r   c                 H    d                     t          d |                    S N
)rJ   filter)r"   ruless     r   startzNearleyToLark.startn   s    yye,,---r   N)__name__
__module____qualname__r#   r'   r+   r*   r2   r9   r=   r@   rC   rO   rQ   rW   r;   r   r   r   r   5   s                 # # #7 7 7& & &    # # ## # #* * *. . . . .r   r   c                 h   g }t                               |           }|j        D ]}|j        dk    r|j        \  }	}
|	dv r|	dk    r|n|}t          j                            ||
dd                   }||vr|                    |           t          j	        |d          5 }|
                                }d d d            n# 1 swxY w Y   |t          ||||t          j                            t          j                            |                    |          z  }J |	            |j        d	k    r*|j        \  }|d
d         }|                    |           :|j        dk    rG|j        dk    r*|                    |                    |                     |t!          d|z            |S )N	directive)builtinincluder]   r%   rE   utf8encodingFrM   rF   rG   macror2   zUnknown statement: %s)nearley_grammar_parserparserI   dataospathrJ   addcodecsopenread_nearley_to_larkabspathdirnameappend	transform	Exception)gbuiltin_pathn2lrM   folder_pathincludes	rule_defstree	statementr\   argfolderrg   ftextr&   s                   r   rl   rl   q   s   I!''**D] A A	>[((&/NIs222)2i)?)?[w||FC"I66x''LL&&&TF;;; (q vvxx( ( ( ( ( ( ( ( ( ( ( ( ( ( (!1$c7TVT[TcTcdfdkdsdstxdydyTzTz  }E  "F  "F  FI'i''u^y((&FD":DNN4    ^w&&^y((S]]95566663i?@@@s   !CC		C	Fc           	         dd l }g dfd	}dg}t                      }t          | ||||t                                }	d                    |	          }
|
dd                    d |j                                        D                       z   z  }
 |d            |              |dt          |
          z               |             |j                                        D ] \  }}|	                    |d|d	           !|r2 ||
                    d                    |                               n1 ||                    d                    |                                |d
           |j        D ]} |d|d|d            |d            |              |d|z              |d            |d           d                              S )Nr   c                 `    | r                     |                                 d           d S rS   )ro   )rK   	emit_codes    r   emitz-create_code_for_nearley_grammar.<locals>.emit   s9     	 Qr   zfunction id(x) {return x[0];}rT   c              3       K   | ]	}d |z  V  
dS )z!%s: %sNr;   ).0r7   s     r   	<genexpr>z2create_code_for_nearley_grammar.<locals>.<genexpr>   s'      RR$Y-RRRRRRr   z"from lark import Lark, Transformerz
grammar = z = (z);z$class TransformNearley(Transformer):z    z = var.get('z').to_python()z8    __default__ = lambda self, n, c, m: c if c else Nonez>parser = Lark(grammar, start="n_%s", maybe_placeholders=False)zdef parse(text):z;    return TransformNearley().transform(parser.parse(text))r?   r-   )js2pyr   rl   setrJ   r   itemsreprr    ro   translate_js6translate_js)rr   rW   rs   ru   es6r   r   rM   rt   rw   lark_grN   r&   r   s                @r   create_code_for_nearley_grammarr      s8   LLLI     
 //G
//C L#wSUUSSIYYy!!F
d499RR#/:O:O:Q:QRRRRRRRFD	-...DFFFDV	$%%%DFFF(..00 5 5tuuuddd34444
 5U  7!3!3445555U		' 2 233444D	/000" D DUUUEEEBCCCCD	CDDDDFFFD	IE	QRRRD	D	FGGG779r   c           
      ^   t          j        | d          5 }|                                }d d d            n# 1 swxY w Y   t          ||t          j                            |d          t          j                            t          j                            |                     |          S )Nr_   r`   r]   )r   )	ri   rj   rk   r   rf   rg   rJ   rm   rn   )fnrW   nearley_libr   r|   grammars         r   mainr      s    	R&	)	)	) Q&&((              *7E27<<U^;_;_acahapapqsqx  rA  rA  BD  rE  rE  bF  bF  LO  P  P  P  Ps   8<<c                      t          j        d          } |                     dd           |                     dd           |                     dd	           |                     d
dd           | S )NzSReads a Nearley grammar (with js functions), and outputs an equivalent lark parser.)descriptionnearley_grammarz/Path to the file containing the nearley grammar)help
start_rulez5Rule within the nearley grammar to make the base ruler   zHPath to root directory of nearley codebase (used for including builtins)z--es6zEnable experimental ES6 support
store_true)r   action)argparseArgumentParseradd_argument)r   s    r   get_arg_parserr      s    $  2G  H  H  HF
)0abbb
+bccc
,vwww
&GP\]]]Mr   __main__r%   )r   rW   r   r   )F)__doc__os.pathrf   sysri   r   larkr   r   r   r   rc   r   r   rl   r   r   r   rX   r   r)   argv
print_helpstderrexit
parse_argsargsprintr   r   r   r;   r   r   <module>r      s   # #  



   + * * * * * * * * *"H ohgNNN : : : t9. 9. 9. 9. 9.K 9. 9. 9.v  >% % % %NP P P P
   z^F
s38}}#*%%%D	E$$$&do4K[aeai
j
j
jkkkkk r   