+
    hj                    H    R t ^ RIHt ^RIHtHt  ! R R]4      tR R ltR# )a  `#define` macro expansion.

Confirmed (reverse_engineering.md, batches 3 & 4): `#define`d constants
compile *identically* to writing the value directly, in every context
tested (plain assignment, function-call argument). So the simplest correct
implementation is textual substitution on the token stream before parsing:
delete the `#define` lines, and splice each macro's body tokens in wherever
its name is referenced.

This is a single, non-recursive substitution pass -- a macro's body isn't
itself re-expanded for other macro references. The manual's own examples
(`#define CommandID _GO + 5`) don't nest macros, and nothing in the
confirmed corpus does either, so this is left as a TODO rather than
speculatively implemented.
)annotations)Token	TokenTypec                      ] tR t^tRtR# )PreprocessorError N)__name__
__module____qualname____firstlineno____static_attributes__r       r\\thalassa.shore.mbari.org\ProjectLibrary\ESP\FIDO\PumpController\compiler\src\microbasic_compiler\preprocessor.pyr   r      s    r   r   c                    V ^8  d   QhRRRR/# )   tokenszlist[Token]returnr   )formats   "r   __annotate__r      s     " "+ "+ "r   c                   / p. p^ p\        V 4      pW48  EdA   W,          pVP                  \        P                  8X  d   VP                  R8X  d   V^,           V8  g-   W^,           ,          P                  \        P
                  8w  d   \        RVP                   R24      hW^,           ,          P                  P                  4       p. pV^,           pW8  dX   W,          P                  \        P                  \        P                  39  d#   VP                  W,          4       V^,          pK]  WqV&   TpEK*  VP                  V4       V^,          pEKG  V'       g   V# . p	V F  pVP                  \        P
                  8X  dQ   VP                  P                  4       V9   d2   V	P                  WP                  P                  4       ,          4       Kr  V	P                  V4       K  	  V	# )    z#definez/#define must be followed by a macro name (line ))lentyper   KEYWORDvalueIDENTr   linelowerNEWLINEEOFappendextend)
r   macrosoutintoknamebodyjexpandeds
   &         r   expand_macrosr,      sm   %'FC	AFA
%i88y(((SYY)-C1uzVE]//9??B'EchhZqQ  a%=&&,,.D "DAA%FINN93D3Dimm2TTFI&Q4LA

3	Q
H88y&399??+<+FOOF99??#456OOC 	 
 Or   N)	__doc__
__future__r   r   r   r   	Exceptionr   r,   r   r   r   <module>r0      s#     # $		 	"r   