o
    „ÓhÄ  ã                   @   sº   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
mZmZmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZ defdd	„ZdS )
zöThis module provides types for representing, validating, and parsing URCL code.
URCL is a toy assembly-like langauge originally designed to target computers in Minecraft.
Informal documentation can be found at https://github.com/ModPunchtree/URCLé    N)ÚMnemonicÚGeneralRegisterÚBasePointerÚStackPointerÚPortÚLabelÚ	Character)ÚtokenizeÚTokenStream)ÚCSTÚInstructionCSTNodeÚOperandCSTNodeÚOperandTypeÚDefinedImmediate)Ú TWO_OPERAND_ARITHMETIC_MNEMONICSÚ$TWO_OPERAND_CONDITION_JUMP_MNEMONICSÚ&THREE_OPERAND_CONDITION_JUMP_MNEMONICSÚZERO_OPERAND_MNEMONICSÚ"THREE_OPERAND_ARITHMETIC_MNEMONICSÚsourcec                 C   sT   t | ƒ}t|tjƒr|}| d¡ |S tj |¡}t|tjƒr(|}| d¡ |S |S )NzCode contains an invalid tokenz&Syntax error while forming syntax tree)r	   Ú
isinstanceÚerrorÚ	TracebackÚ	elaborateÚurclcstr   Úfrom_tokens)r   ÚtokensÚerrÚcst© r   ú7/home/seanl/mnt/public/Repos/urclelf/./urcl/__init__.pyÚparse   s   

r!   )Ú__doc__r   Ú
urcl.typesÚtypesÚurcl.lexÚlexÚurcl.urclcstr   Úurcl.urclastÚurclastr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ústrr!   r   r   r   r    Ú<module>   s    $