Edit File: c_lexer.cpython-36.opt-1.pyc
3 ��]m8������������������@���s<���d�dl�Z�d�dlZd�dlmZ�d�dlmZ�G�dd��de�ZdS�)�����N)�lex)�TOKENc������������<���@���sl��e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zd d��Zdd ��Z dd��Z dd��Z�dZi�Z x<eD�]4Zedkrree d7<�q\edkr�ee d8<�q\ee ej��<�q\W�e�d �ZdtZduZdvZdwZdxZdyZdze�d{�e�d|�Zd}e�Zee�e�Zee�e�Zd~ZdZd�Zd�Zd�Zd�e�d��e�d��e�d��Z d�e �d|�Z!d�e!�d��Z"d�e"�Z#d�e!�d��e!�d��Z$d�e!�d��e�d��Z%d�e �d|�Z&d�e&�d��Z'd�e'�Z(d�e&�d��e�e&�d��Z)d�Z*d�Z+d�e+�d|�e*�d��e*�d��Z,d�Z-d�e�d��e�d��e�d��Z.d�e�d��e�d��e.�d|�e-�d��Z/�dZ0d�d���Z1e2e'�d�d����Z3e2e�d�d����Z4d�d���Z5d�d���Z6d�Z7d�d���Z8d�d���Z9d�d���Z:d�Z;e2e'�d�d����Z<e2e�d�d����Z=d�d���Z>d�Z?d�d���Z@d�ZAd�ZBd�ZCd�ZDd�ZEd�ZFd�ZGd�ZHd�ZId�ZJd�ZKd�ZLd�ZMd�ZNd�ZOd�ZPd�ZQd�ZRd�ZSd�ZTd�ZUd�ZVd�ZWd�ZXd�ZYd�ZZd�Z[d�Z\d�Z]d�Z^d�Z_d�Z`d�Zad�Zbd�Zcd�Zdd�Zed�Zfd�Zgd�Zhd�Zid�Zjd�Zkd�Zle2d�d�d���Zme2d�d�d���Zne'Zoe2e,�d�d���Zpe2e/�d�d���Zqe2e�d�d���Zre2e�d�d���Zse2e�d�d����Zte2e�d�d����Zue2e�d�d����Zve2e"�d�d����Zwe2e#�d�d����Zxe2e$�d��d����Zye2e%��d�d���Zze2e(��d�d���Z{e2e)��d�d���Z|e2e��d�d���Z}�d �d ��Z~�dS�(���CLexera�� A lexer for the C language. After building it, set the input text with input(), and call token() to get new tokens. The public attribute filename can be set to an initial filaneme, but the lexer will update it upon #line directives. c�������������C���s@���||�_�||�_||�_||�_d|�_d|�_tjd�|�_tjd�|�_ dS�)ab�� Create a new Lexer. error_func: An error function. Will be called with an error message, line and column as arguments, in case of an error during lexing. on_lbrace_func, on_rbrace_func: Called when an LBRACE or RBRACE is encountered (likely to push/pop type_lookup_func's scope) type_lookup_func: A type lookup function. Given a string, it must return True IFF this string is a name of a type that was defined with a typedef earlier. ��Nz([ ]*line\W)|([ ]*\d+)z [ ]*pragma\W) � error_func�on_lbrace_func�on_rbrace_func�type_lookup_func�filename� last_token�re�compile�line_pattern�pragma_pattern)�selfr���r���r���r �����r����/usr/lib/python3.6/c_lexer.py�__init__���s����zCLexer.__init__c�������������K���s���t�j�f�d|�i|��|�_dS�)z� Builds the lexer from the specification. Must be called after the lexer object is created. This method exists separately, because the PLY manual warns against calling lex.lex inside __init__ �objectN)r����lexer)r����kwargsr���r���r����build:���s����zCLexer.buildc�������������C���s���d|�j�_dS�)z? Resets the internal line number counter of the lexer. ����N)r����lineno)r���r���r���r����reset_linenoD���s����zCLexer.reset_linenoc�������������C���s���|�j�j|��d�S�)N)r����input)r����textr���r���r���r���I���s����zCLexer.inputc�������������C���s���|�j�j��|�_|�jS�)N)r����tokenr���)r���r���r���r���r���L���s����zCLexer.tokenc�������������C���s���|�j�jjdd|j�}|j|�S�)z3 Find the column of the token in its line. � r���)r����lexdata�rfind�lexpos)r���r���Zlast_crr���r���r����find_tok_columnP���s����zCLexer.find_tok_columnc�������������C���s0���|�j�|�}|�j||d�|d���|�jjd��d�S�)Nr���r���)�_make_tok_locationr���r����skip)r����msgr����locationr���r���r����_error[���s���� z CLexer._errorc�������������C���s���|j�|�j|�fS�)N)r���r"���)r���r���r���r���r���r#���`���s����zCLexer._make_tok_location�_BOOL�_COMPLEX�AUTO�BREAK�CASE�CHAR�CONST�CONTINUE�DEFAULT�DO�DOUBLE�ELSE�ENUM�EXTERN�FLOAT�FOR�GOTO�IF�INLINE�INT�LONG�REGISTER�OFFSETOF�RESTRICT�RETURN�SHORT�SIGNED�SIZEOF�STATIC�STRUCT�SWITCH�TYPEDEF�UNION�UNSIGNED�VOID�VOLATILE�WHILEZ_BoolZ_Complex�ID�TYPEID� INT_CONST_DEC� INT_CONST_OCT� INT_CONST_HEX� INT_CONST_BIN�FLOAT_CONST�HEX_FLOAT_CONST� CHAR_CONST�WCHAR_CONST�STRING_LITERAL�WSTRING_LITERAL�PLUS�MINUS�TIMES�DIVIDE�MOD�OR�AND�NOT�XOR�LSHIFT�RSHIFT�LOR�LAND�LNOT�LT�LE�GT�GE�EQ�NE�EQUALS� TIMESEQUAL�DIVEQUAL�MODEQUAL� PLUSEQUAL� MINUSEQUAL�LSHIFTEQUAL�RSHIFTEQUAL�ANDEQUAL�XOREQUAL�OREQUAL�PLUSPLUS� MINUSMINUS�ARROW�CONDOP�LPAREN�RPAREN�LBRACKET�RBRACKET�LBRACE�RBRACE�COMMA�PERIOD�SEMI�COLON�ELLIPSIS�PPHASHz[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*�)z0[0-7]*z0[0-7]*[89]z([a-zA-Z._~!=&\^\-\\?'"])z(\d+)z(x[0-9a-fA-F]+)z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])z(\\(�|z))z ([^'\\\n]|�'�Lz('z*\n)|('z*$)z[^' ]+')|('')|('z [^'\n]*')z ([^"\\\n]|�"z*"�*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z ?)|([0-9]+z ))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))�(z[FfLl]?)�ppline� exclusive�pppragmac�������������C���sf���|�j�j|jj|jjd�r2|jjd��d�|�_|�_n0|�jj|jj|jjd�rX|jjd��n d|_ |S�dS�)z[ \t]*\#)�posr����Nr����r����) r����matchr���r���r!����begin�pp_line�pp_filenamer����type)r����tr���r���r����t_PPHASH����s����zCLexer.t_PPHASHc�������������C���s0���|�j�d�kr|�jd|��n|jjd�jd�|�_d�S�)Nz$filename before line number in #liner����)r����r'����value�lstrip�rstripr����)r���r����r���r���r����t_ppline_FILENAME��s���� zCLexer.t_ppline_FILENAMEc�������������C���s���|�j�d�kr|j|�_�n�d�S�)N)r����r����)r���r����r���r���r����t_ppline_LINE_NUMBER ��s���� zCLexer.t_ppline_LINE_NUMBERc�������������C���sH���|�j�dkr|�jd|��n t|�j��|�j_|�jdk r8|�j|�_|jjd��dS�)z\nNzline number missing in #line�INITIAL)r����r'����intr���r���r����r ���r����)r���r����r���r���r����t_ppline_NEWLINE��s���� zCLexer.t_ppline_NEWLINEc�������������C���s���dS�)�lineNr���)r���r����r���r���r����t_ppline_PPLINE ��s����zCLexer.t_ppline_PPLINEz c�������������C���s���|�j�d|��d�S�)Nzinvalid #line directive)r'���)r���r����r���r���r����t_ppline_error&��s����zCLexer.t_ppline_errorc�������������C���s ���|j��jd7��_|j�jd��dS�)z\nr���r����N)r���r���r����)r���r����r���r���r����t_pppragma_NEWLINE,��s����zCLexer.t_pppragma_NEWLINEc�������������C���s���dS�)ZpragmaNr���)r���r����r���r���r����t_pppragma_PPPRAGMA1��s����zCLexer.t_pppragma_PPPRAGMAz$ <>.-{}();=+-*/$%@&^~!?:,0123456789c�������������C���s���d�S�)Nr���)r���r����r���r���r����t_pppragma_STR7��s����zCLexer.t_pppragma_STRc�������������C���s���d�S�)Nr���)r���r����r���r���r���� t_pppragma_ID:��s����zCLexer.t_pppragma_IDc�������������C���s���|�j�d|��d�S�)Nzinvalid #pragma directive)r'���)r���r����r���r���r����t_pppragma_error=��s����zCLexer.t_pppragma_errorc�������������C���s���|j��j|jjd�7��_dS�)z\n+r���N)r���r���r�����count)r���r����r���r���r���� t_NEWLINEF��s����zCLexer.t_NEWLINEz\+�-z\*�/�%z\|�&�~z\^z<<z>>z\|\|z&&�!�<�>z<=z>=z==z!=�=z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\]�,z\.�;�:z\.\.\.z\{c�������������C���s���|�j����|S�)N)r���)r���r����r���r���r����t_LBRACE���s����zCLexer.t_LBRACEz\}c�������������C���s���|�j����|S�)N)r���)r���r����r���r���r����t_RBRACE���s����zCLexer.t_RBRACEc�������������C���s���|S�)Nr���)r���r����r���r���r���� t_FLOAT_CONST���s����zCLexer.t_FLOAT_CONSTc�������������C���s���|S�)Nr���)r���r����r���r���r����t_HEX_FLOAT_CONST���s����zCLexer.t_HEX_FLOAT_CONSTc�������������C���s���|S�)Nr���)r���r����r���r���r����t_INT_CONST_HEX���s����zCLexer.t_INT_CONST_HEXc�������������C���s���|S�)Nr���)r���r����r���r���r����t_INT_CONST_BIN���s����zCLexer.t_INT_CONST_BINc�������������C���s���d}|�j�||��d�S�)NzInvalid octal constant)r'���)r���r����r%���r���r���r����t_BAD_CONST_OCT���s����zCLexer.t_BAD_CONST_OCTc�������������C���s���|S�)Nr���)r���r����r���r���r����t_INT_CONST_OCT���s����zCLexer.t_INT_CONST_OCTc�������������C���s���|S�)Nr���)r���r����r���r���r����t_INT_CONST_DEC���s����zCLexer.t_INT_CONST_DECc�������������C���s���|S�)Nr���)r���r����r���r���r����t_CHAR_CONST���s����zCLexer.t_CHAR_CONSTc�������������C���s���|S�)Nr���)r���r����r���r���r���� t_WCHAR_CONST���s����zCLexer.t_WCHAR_CONSTc�������������C���s���d}|�j�||��d�S�)NzUnmatched ')r'���)r���r����r%���r���r���r����t_UNMATCHED_QUOTE���s����zCLexer.t_UNMATCHED_QUOTEc�������������C���s���d|j��}|�j||��d�S�)NzInvalid char constant %s)r����r'���)r���r����r%���r���r���r����t_BAD_CHAR_CONST���s���� zCLexer.t_BAD_CHAR_CONSTc�������������C���s���|S�)Nr���)r���r����r���r���r����t_WSTRING_LITERAL���s����zCLexer.t_WSTRING_LITERALc�������������C���s���d}|�j�||��d�S�)Nz#String contains invalid escape code)r'���)r���r����r%���r���r���r����t_BAD_STRING_LITERAL���s����zCLexer.t_BAD_STRING_LITERALc�������������C���s2���|�j�j|jd�|_|jdkr.|�j|j�r.d|_|S�)NrM���rN���)�keyword_map�getr����r����r ���)r���r����r���r���r����t_ID���s����zCLexer.t_IDc�������������C���s"���dt�|jd���}|�j||��d�S�)NzIllegal character %sr���)�reprr����r'���)r���r����r%���r���r���r����t_error���s����zCLexer.t_errorN)%r(���r)���r*���r+���r,���r-���r.���r/���r0���r1���r2���r3���r4���r5���r6���r7���r8���r9���r:���r;���r<���r=���r>���r?���r@���rA���rB���rC���rD���rE���rF���rG���rH���rI���rJ���rK���rL���);rM���rN���rO���rP���rQ���rR���rS���rT���rU���rV���rW���rX���rY���rZ���r[���r\���r]���r^���r_���r`���ra���rb���rc���rd���re���rf���rg���rh���ri���rj���rk���rl���rm���rn���ro���rp���rq���rr���rs���rt���ru���rv���rw���rx���ry���rz���r{���r|���r}���r~���r���r����r����r����r����r����r����r����r�����r����r�����r����r����)r����r����)�__name__� __module__�__qualname__�__doc__r���r���r���r���r���r"���r'���r#����keywordsr�����keyword�lower�tokensZ identifierZ hex_prefixZ hex_digitsZ bin_prefixZ bin_digitsZinteger_suffix_optZdecimal_constantZoctal_constantZhex_constantZbin_constantZbad_octal_constantZ simple_escapeZdecimal_escapeZ hex_escapeZ bad_escapeZescape_sequenceZcconst_charZ char_constZwchar_constZunmatched_quoteZbad_char_constZstring_charZstring_literalZwstring_literalZbad_string_literalZ exponent_partZfractional_constantZfloating_constantZbinary_exponent_partZhex_fractional_constantZhex_floating_constantZstatesr����r���r����r����r����r����Zt_ppline_ignorer����r����r����Zt_pppragma_ignorer����r����r����Zt_ignorer����Zt_PLUSZt_MINUSZt_TIMESZt_DIVIDEZt_MODZt_ORZt_ANDZt_NOTZt_XORZt_LSHIFTZt_RSHIFTZt_LORZt_LANDZt_LNOTZt_LTZt_GTZt_LEZt_GEZt_EQZt_NEZt_EQUALSZt_TIMESEQUALZ t_DIVEQUALZ t_MODEQUALZt_PLUSEQUALZt_MINUSEQUALZ t_LSHIFTEQUALZ t_RSHIFTEQUALZ t_ANDEQUALZ t_OREQUALZ t_XOREQUALZ t_PLUSPLUSZt_MINUSMINUSZt_ARROWZt_CONDOPZt_LPARENZt_RPARENZ t_LBRACKETZ t_RBRACKETZt_COMMAZt_PERIODZt_SEMIZt_COLONZ t_ELLIPSISr����r����Zt_STRING_LITERALr����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r���r���r���r���r������s@��! ������ ������������������������� $� r���)r����sysZplyr���Zply.lexr���r���r���r���r���r���r����<module> ���s���