U տVX� � @ sF d dl mZ dZdZdd� ZdZdZdZd d � ZeZ dZ dd � Zdd� Zdd� Z dd� Zdd� Zd dlZd dlZd dlZd dlZe�d�Zddddddddd d!� Zd"d#� ZG d$d%� d%e�ZG d&d'� d'e�Zed(k�rBd dlmZ e�� Zd dl Z e!e j"d) �Z#e#�$� Z%ee�Z&e&�'e%e j"d) � e&�(� Z)e)�s2�qBe*e&j+e)� �q dS )*� )� generators) ZCPP_ID�CPP_INTEGERZ CPP_FLOATZ CPP_STRINGZCPP_CHAR�CPP_WSZCPP_COMMENT1ZCPP_COMMENT2Z CPP_POUNDZ CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"c C s | j j| j�d�7 _| S )z\s+� ��lexer�lineno�value�count��t� r �/cpp.py�t_CPP_WS s r z\#z\#\#z[A-Za-z_][\w_]*c C s | S )zA(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)r r r r r r $ s r z?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?c C s | j j| j�d�7 _| S )z\"([^\\\n]|(\\(.|\n)))*?\"r r r r r r �t_CPP_STRING. s r c C s | j j| j�d�7 _| S )z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r r r r r r � t_CPP_CHAR4 s r c C s8 | j �d�}| j j|7 _d| _|r.d| nd| _ | S )z(/\*(.|\n)*?\*/)r r � )r r r r �type)r Zncrr r r �t_CPP_COMMENT1: s r c C s d| _ d| _dS )z (//.*?(\n|$))r r N)r r r r r r �t_CPP_COMMENT2C s r c C s( | j d | _| j d | _ | j�d� | S �Nr � )r r r �skipr r r r �t_errorH s r Nz\?\?[=/\'\(\)\!<>\-]�#�\�^�[�]�|�{�}�~) �=�/�'�(�)�!�<�>�-c C s t �dd� | �S )Nc S s t | �� d S �N���)� _trigraph_rep�group)�gr r r �<lambda>r � ztrigraph.<locals>.<lambda>)� _trigraph_pat�sub)�inputr r r �trigraphq s r6 c @ s e Zd Zddd�ZdS )�MacroNFc C s0 || _ || _|| _|| _|r&|d | _d | _d S r, )�namer �arglist�variadic�vararg�source)�selfr8 r r9 r: r r r �__init__� s zMacro.__init__)NF)�__name__� __module__�__qualname__r>