
    dafQ                         d dl mZ d dlmZ d dlmZmZmZmZ  G d de	      Z
 G d de      Z G d d	e      Zd
ej                  ddfdZy)    )Optional)grammar)AltGrammarVisitorRhsRulec                       e Zd Zy)ValidationErrorN)__name__
__module____qualname__     :/root/Python-3.12.4/Tools/peg_generator/pegen/validator.pyr
   r
      s    r   r
   c                   D    e Zd Zdej                  ddfdZdededdfdZy)GrammarValidatorr   returnNc                      || _         d | _        y N)r   rulename)selfr   s     r   __init__zGrammarValidator.__init__   s    '+r   r   nodec                 B    || _         | j                  |       d | _         y r   )r   visit)r   r   r   s      r   validate_rulezGrammarValidator.validate_rule   s     

4r   )	r   r   r   r   Grammarr   strr   r   r   r   r   r   r      s3    , ,D ,c  $ r   r   c                   0    e Zd ZdeddfdZdededdfdZy)SubRuleValidatorr   r   Nc                     t        |j                        D ]0  \  }}|j                  |dz   d  }|D ]  }| j                  ||        2 y )N   )	enumeratealtscheck_intersection)r   r   indexaltalts_to_consider	other_alts         r   	visit_RhszSubRuleValidator.visit_Rhs   sR    #DII. 	8JE3#yy5- 8	''Y78	8r   	first_alt
second_altc                     t        |      j                  t        |            rt        d| j                   d|       y )NzIn z5 there is an alternative that will never be visited:
)r   
startswithr
   r   )r   r+   r,   s      r   r%   z#SubRuleValidator.check_intersection   sD    z?%%c)n5!dmm_ %&&0\3  6r   )r   r   r   r   r*   r   r%   r   r   r   r    r       s/    8c 8d 8C S T r   r    the_grammarr   Nc                     t         j                         D ]>  } ||       }| j                  j                         D ]  \  }}|j	                  ||        @ y r   )r   __subclasses__rulesitemsr   )r/   validator_cls	validator	rule_namerules        r   validate_grammarr8   %   sV    )88: 5!+.	*00668 	5OIt##It4	55r   )typingr   pegenr   pegen.grammarr   r   r   r   	Exceptionr
   r   r    r   r8   r   r   r   <module>r=      sM      8 8	i 	~ ' 5'// 5d 5r   