o
    È6÷dÆ  ã                   @   sD   d dl Z ddlmZ ddlmZ ddlmZ e  d¡Zdd	d
„Z	dS )é    Né   )ÚInvalidSpec)ÚParserFactory)ÚIRGeneratorzstone.frontend.frontendú0.1b1Fc                 C   s¨   t |d}g }| D ]@\}}t d|¡ | ¡ }|r| |¡ | ||¡}	| ¡ r7| ¡ d \}
}}t|
||ƒ‚t	|	ƒdkrDt d|¡ q	| 
|	¡ q	t||||d ¡ S )af  
    Converts a collection of Stone specifications into the intermediate
    representation used by Stone backends.

    The process is: Lexer -> Parser -> Semantic Analyzer -> IR Generator.

    The code is structured as:
        1. Parser (Lexer embedded within)
        2. IR Generator (Semantic Analyzer embedded within)

    :type specs: List[Tuple[path: str, text: str]]
    :param specs: `path` is never accessed and is only used to report the
        location of a bad spec to the user. `spec` is the text contents of
        a spec (.stone) file.

    :raises: InvalidSpec

    :returns: stone.ir.Api
    )ÚdebugzParsing spec %sr   zEmpty spec: %s)r   Úroute_whitelist_filter)r   ÚloggerÚinfoZ
get_parserZtest_lexingÚparseZgot_errors_parsingZ
get_errorsr   ÚlenÚappendr   Zgenerate_IR)ÚspecsÚversionr   r   Zparser_factoryZpartial_astsÚpathÚtextÚparserZpartial_astÚmsgÚlineno© r   únC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\stone/frontend/frontend.pyÚspecs_to_ir   s&   

ÿÿr   )r   FN)
ÚloggingÚ	exceptionr   r   r   Zir_generatorr   Ú	getLoggerr	   r   r   r   r   r   Ú<module>   s    
