
    <g                        d dl mZ d dlZd dlmZmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlZ G d dej                  Ze G d	 d
                      Zdedeez  fdZdedeez  fdZdedeez  fdZdedeez  fdZdS )    )	dataclassN)SelfSequence)	Traceback)TokenTokenStream	TokenType)
HeaderTypec                   F    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ZdZdS )CSTNodeTypePROGRAMLINEINSTRUCTIONMACRO_DEFINITIONHEADERLABEL_DEFINITIONMNEMONICOPERANDDEFINE_KEYWORDDEFINED_IDENTIFIER
DEFINITIONHEADER_KEYWORD
INEQUALITYHEADER_VALUEN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r        E/media/seanl/Data/Files/Programming/Python/URCL/urclelf/urcl/./cst.pyr   r   
   sW        GDK)F)HG%N-J%NJ!LLLr   r   c                   B    e Zd ZU eed<   eeez           ed<   defdZ	dS )CSTNode	node_typeleavesreturnc           	      j   g }| j         D ]S}t          |t                    r#|                    t	          |                     :|                    d| d           Tdd                    |           d}t          j        t          j        dd| j	        j
         d| z   dz             d	          S )
N"[,]{z": }   )indent)r$   
isinstancer"   appendstrjoinjsondumpsloadsr#   value)selfbleaf	value_strs       r    __str__zCSTNode.__str__   s    K 	& 	&D$(( &T####T%%%%&&&&	z$*S)Sdn.B)S)S	)S)S%STW%WXXabccccr   N)
r   r   r   r   __annotations__r   r   r   r1   r;   r   r   r    r"   r"      sY         TE\""""	d 	d 	d 	d 	d 	d 	dr   r"   tokensr%   c           	      0   t          | j                  dk     rKt          j        d| j        d         j         d| j        d         j        | j        d         j                  S | j        d         j        t          j	        k    rvt          j        d| j        d         j         d| j        d         j
         d	| j        d         j        j         d
| j        d         j        | j        d         j                  S t          | j                  dk    rvt          j        d| j        d         j         d| j        d         j
         d	| j        d         j        j         d| j        d         j        | j        d         j                  S t          t          j        | j        d         g          }t          t          j        | j        d         g          }t          t          j        | j        dd                    }t          t          j        |||g          S )N   zHeaders such as r   z require a value if declaredline_numbercolumn_number   z"Expected an integer value for the z header, found 'z' (z	) insteadz only take one value, the 'z) should be removed)lenr=   r   newr6   rA   rB   typer	   INTEGERsourcer"   r   r   r   r   r   r=   define_keyworddefined_identifier
definitions       r    create_header_cstrM   *   s   
6=A}da0@0Fdddrxr  AB  sC  sO  _e  _l  mn  _o  _}  ~  ~  ~  	~}Q	 111}  m&-PQBRBX  m  mjpjwxyjz  kB  m  m  GM  GT  UV  GW  G\  Gb  m  m  m  {A  {H  IJ  {K  {W  gm  gt  uv  gw  gE  F  F  F  	F
6=A}  pa0@0F  p  pcicpqrcscz  p  p  @F  @M  NO  @P  @U  @[  p  p  p  ~D  ~K  LM  ~N  ~Z  jp  jw  xy  jz  jH  I  I  I  	I[7&-:J9KLLN !?&-PQBRASTT/qrr1BCCJ;%8JJ'WXXXr   c                    t          | j                  dk     r7t          j        d| j        d         j        | j        d         j                  S | j        d         j        t          j        t          j	        fvrPt          j        d| j        d         j        j
         d| j        d         j        | j        d         j                  S t          t          j        | j        d         g          }t          t          j        | j        d         g          }t          t          j        | j        dd                    }t          t          j        |||g          S )	N   z>Macro definition should include an identifier and a definitionr   r@   rC   zExpected macro name, found z insteadr?   )rD   r=   r   rE   rA   rB   rF   r	   
IDENTIFIERMACROr6   r"   r   r   r   r   r   rI   s       r    create_macro_cstrR   9   sm   
6=A}]kqkxyzk{  lH  X^  Xe  fg  Xh  Xv  w  w  w  	w}QY%99?$KKK}`6=;K;P;V```ntn{|}n~  oK  [a  [h  ij  [k  [y  z  z  z  	z[7&-:J9KLLN !?&-PQBRASTT/qrr1BCCJ;/.BTV`1abbbr   c                    | j         d         j        t          j        k    rat	          |           }t          |t                    r<|}|                    d| j         d         j        | j         d         j	                   |S nt          | j         d         j                                                  d t          D             v rat          |           }t          |t                    r<|}|                    d| j         d         j        | j         d         j	                   |S n| j         d         }t          t           j        |g          S )Nr   zInvalid preprocesser directiver@   c                 ,    g | ]}t          |          S r   )r1   ).0headers     r    
<listcomp>z#create_line_cst.<locals>.<listcomp>N   s    0V0V0VV0V0V0Vr   zInvalid header)r=   rF   r	   rQ   rR   r/   r   	elaboraterA   rB   r1   r6   upperr
   rM   r"   r   r   )r=   childrenerrs      r    create_line_cstr\   F   sY   }Q	//#F++h	** 	CMM:VWHXHdtz  uB  CD  uE  uSM  T  T  TJ	 
V]1#	$	$	*	*	,	,0V0V:0V0V0V	V	V$V,,h	** 	CMM*a8H8Tdjdqrsdt  eCM  D  D  DJ	
 =#;#hZ000r   c                 <   g }|                                  D ]l}|st          |          }t          |t                    r.|}|                    d|j        d         j                    |c S |                    |           mt          t          j
        |          S )NzSyntax error on line r   )split_linesr\   r/   r   rX   r=   rA   r0   r"   r   r   )r=   
line_nodeslineline_resultr[   s        r    create_program_cstrb   Y   s     "J""$$ ' ' 	%d++k9-- 	CMMN$+a.2LNNOOOJJJ+&&&&;&
333r   )dataclassesr   	tracebacktypingr   r   enumerrorr   lexr   r   r	   
primitivesr
   r3   Enumr   r"   rM   rR   r\   rb   r   r   r    <module>rk      s   ! ! ! ! ! !     ! ! ! ! ! ! ! !        - - - - - - - - - - ! ! ! ! ! ! " " " " "$) " " "  d d d d d d d dYk Yg	.A Y Y Y Yc[ cWy-@ c c c c1K 1Gi,? 1 1 1 1&4{ 4w/B 4 4 4 4 4 4r   