diff --git a/pcpp/evaluator.py b/pcpp/evaluator.py index 38abe20..498ec1f 100644 --- a/pcpp/evaluator.py +++ b/pcpp/evaluator.py @@ -357,7 +357,7 @@ def __gt__(self, other): # The subset of tokens from Preprocessor used in preprocessor expressions tokens = ( - 'CPP_ID', 'CPP_INTEGER', 'CPP_CHAR', 'CPP_STRING', + 'CPP_ID', 'PP_NUMBER', 'CPP_CHAR', 'CPP_STRING', 'CPP_PLUS', 'CPP_MINUS', 'CPP_STAR', 'CPP_FSLASH', 'CPP_PERCENT', 'CPP_BAR', 'CPP_AMPERSAND', 'CPP_TILDE', 'CPP_HAT', 'CPP_LESS', 'CPP_GREATER', 'CPP_EXCLAMATION', 'CPP_QUESTION', 'CPP_LPAREN', 'CPP_RPAREN', @@ -394,8 +394,12 @@ def p_error(p): raise SyntaxError("at EOF") def p_expression_number(p): - 'expression : CPP_INTEGER' - p[0] = Value(p[1]) + 'expression : PP_NUMBER' + try: + p[0] = Value(p[1]) + except: + p[0] = p[1] + def p_expression_character(p): 'expression : CPP_CHAR' diff --git a/pcpp/lextab.py b/pcpp/lextab.py index 8488774..e9896eb 100644 --- a/pcpp/lextab.py +++ b/pcpp/lextab.py @@ -1,10 +1,10 @@ # lextab.py. This file automatically created by PLY (version 3.11). Don't edit! _tabversion = '3.10' -_lextokens = set(('CPP_AMPERSAND', 'CPP_ANDEQUAL', 'CPP_BAR', 'CPP_BSLASH', 'CPP_CHAR', 'CPP_COLON', 'CPP_COMMA', 'CPP_COMMENT1', 'CPP_COMMENT2', 'CPP_DEREFERENCE', 'CPP_DIVIDEEQUAL', 'CPP_DOT', 'CPP_DPOUND', 'CPP_DQUOTE', 'CPP_EQUAL', 'CPP_EQUALITY', 'CPP_EXCLAMATION', 'CPP_FLOAT', 'CPP_FSLASH', 'CPP_GREATER', 'CPP_GREATEREQUAL', 'CPP_HAT', 'CPP_ID', 'CPP_INEQUALITY', 'CPP_INTEGER', 'CPP_LBRACKET', 'CPP_LCURLY', 'CPP_LESS', 'CPP_LESSEQUAL', 'CPP_LINECONT', 'CPP_LOGICALAND', 'CPP_LOGICALOR', 'CPP_LPAREN', 'CPP_LSHIFT', 'CPP_LSHIFTEQUAL', 'CPP_MINUS', 'CPP_MINUSEQUAL', 'CPP_MINUSMINUS', 'CPP_MULTIPLYEQUAL', 'CPP_OREQUAL', 'CPP_PERCENT', 'CPP_PERCENTEQUAL', 'CPP_PLUS', 'CPP_PLUSEQUAL', 'CPP_PLUSPLUS', 'CPP_POUND', 'CPP_QUESTION', 'CPP_RBRACKET', 'CPP_RCURLY', 'CPP_RPAREN', 'CPP_RSHIFT', 'CPP_RSHIFTEQUAL', 'CPP_SEMICOLON', 'CPP_SQUOTE', 'CPP_STAR', 'CPP_STRING', 'CPP_TILDE', 'CPP_WS', 'CPP_XOREQUAL')) +_lextokens = set(('CPP_AMPERSAND', 'CPP_ANDEQUAL', 'CPP_BAR', 'CPP_BSLASH', 'CPP_CHAR', 'CPP_COLON', 'CPP_COMMA', 'CPP_COMMENT1', 'CPP_COMMENT2', 'CPP_DEREFERENCE', 'CPP_DIVIDEEQUAL', 'CPP_DOT', 'CPP_DPOUND', 'CPP_DQUOTE', 'CPP_EQUAL', 'CPP_EQUALITY', 'CPP_EXCLAMATION', 'CPP_FSLASH', 'CPP_GREATER', 'CPP_GREATEREQUAL', 'CPP_HAT', 'CPP_ID', 'CPP_INEQUALITY', 'CPP_LBRACKET', 'CPP_LCURLY', 'CPP_LESS', 'CPP_LESSEQUAL', 'CPP_LINECONT', 'CPP_LOGICALAND', 'CPP_LOGICALOR', 'CPP_LPAREN', 'CPP_LSHIFT', 'CPP_LSHIFTEQUAL', 'CPP_MINUS', 'CPP_MINUSEQUAL', 'CPP_MINUSMINUS', 'CPP_MULTIPLYEQUAL', 'CPP_OREQUAL', 'CPP_PERCENT', 'CPP_PERCENTEQUAL', 'CPP_PLUS', 'CPP_PLUSEQUAL', 'CPP_PLUSPLUS', 'CPP_POUND', 'CPP_QUESTION', 'CPP_RBRACKET', 'CPP_RCURLY', 'CPP_RPAREN', 'CPP_RSHIFT', 'CPP_RSHIFTEQUAL', 'CPP_SEMICOLON', 'CPP_SQUOTE', 'CPP_STAR', 'CPP_STRING', 'CPP_TILDE', 'CPP_WS', 'CPP_XOREQUAL', 'PP_NUMBER')) _lexreflags = 64 _lexliterals = '+-*/%|&~^<>=!?()[]{}.,;:\\\'"' _lexstateinfo = {'INITIAL': 'inclusive'} -_lexstatere = {'INITIAL': [('(?P([ \\t]+|\\n))|(?P\\\\[ \\t]*\\n)|(?P(((((0x)|(0X))[0-9a-fA-F]+)|(\\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?))|(?P\\"([^\\\\\\n]|(\\\\(.|\\n)))*?\\")|(?P(L)?\\\'([^\\\\\\n]|(\\\\(.|\\n)))*?\\\')|(?P(/\\*(.|\\n)*?\\*/))|(?P(//[^\\n]*))|(?P((\\d+)(\\.\\d+)(e(\\+|-)?(\\d+))?|(\\d+)e(\\+|-)?(\\d+))([lL]|[fF])?)|(?P[A-Za-z_][\\w_]*)|(?P\\|\\|)|(?P\\+\\+)|(?P\\#\\#)|(?P<<=)|(?P\\|=)|(?P\\+=)|(?P>>=)|(?P\\*=)|(?P\\|)|(?P/=)|(?P\\#)|(?P%=)|(?P->)|(?P\\))|(?P&=)|(?P\\])|(?P\\()|(?P>>)|(?P<=)|(?P\\^)|(?P&&)|(?P==)|(?P>=)|(?P\\\\)|(?P-=)|(?P\\.)|(?P--)|(?P\\[)|(?P\\+)|(?P^=)|(?P\\*)|(?P\\?)|(?P<<)|(?P!=)|(?P")|(?P-)|(?P})|(?P>)|(?P<)|(?P\')|(?P!)|(?P{)|(?P=)|(?P/)|(?P:)|(?P&)|(?P,)|(?P~)|(?P;)|(?P%)', [None, ('t_CPP_WS', 'CPP_WS'), None, ('t_CPP_LINECONT', 'CPP_LINECONT'), ('t_CPP_INTEGER', 'CPP_INTEGER'), None, None, None, None, None, None, None, None, ('t_CPP_STRING', 'CPP_STRING'), None, None, None, ('t_CPP_CHAR', 'CPP_CHAR'), None, None, None, None, ('t_CPP_COMMENT1', 'CPP_COMMENT1'), None, None, ('t_CPP_COMMENT2', 'CPP_COMMENT2'), None, (None, 'CPP_FLOAT'), None, None, None, None, None, None, None, None, None, None, (None, 'CPP_ID'), (None, 'CPP_LOGICALOR'), (None, 'CPP_PLUSPLUS'), (None, 'CPP_DPOUND'), (None, 'CPP_LSHIFTEQUAL'), (None, 'CPP_OREQUAL'), (None, 'CPP_PLUSEQUAL'), (None, 'CPP_RSHIFTEQUAL'), (None, 'CPP_MULTIPLYEQUAL'), (None, 'CPP_BAR'), (None, 'CPP_DIVIDEEQUAL'), (None, 'CPP_POUND'), (None, 'CPP_PERCENTEQUAL'), (None, 'CPP_DEREFERENCE'), (None, 'CPP_RPAREN'), (None, 'CPP_ANDEQUAL'), (None, 'CPP_RBRACKET'), (None, 'CPP_LPAREN'), (None, 'CPP_RSHIFT'), (None, 'CPP_LESSEQUAL'), (None, 'CPP_HAT'), (None, 'CPP_LOGICALAND'), (None, 'CPP_EQUALITY'), (None, 'CPP_GREATEREQUAL'), (None, 'CPP_BSLASH'), (None, 'CPP_MINUSEQUAL'), (None, 'CPP_DOT'), (None, 'CPP_MINUSMINUS'), (None, 'CPP_LBRACKET'), (None, 'CPP_PLUS'), (None, 'CPP_XOREQUAL'), (None, 'CPP_STAR'), (None, 'CPP_QUESTION'), (None, 'CPP_LSHIFT'), (None, 'CPP_INEQUALITY'), (None, 'CPP_DQUOTE'), (None, 'CPP_MINUS'), (None, 'CPP_RCURLY'), (None, 'CPP_GREATER'), (None, 'CPP_LESS'), (None, 'CPP_SQUOTE'), (None, 'CPP_EXCLAMATION'), (None, 'CPP_LCURLY'), (None, 'CPP_EQUAL'), (None, 'CPP_FSLASH'), (None, 'CPP_COLON'), (None, 'CPP_AMPERSAND'), (None, 'CPP_COMMA'), (None, 'CPP_TILDE'), (None, 'CPP_SEMICOLON'), (None, 'CPP_PERCENT')])]} +_lexstatere = {'INITIAL': [('(?P([ \\t]+|\\n))|(?P\\\\[ \\t]*\\n)|(?P\\.?\\d(\\.|[\\w_]|\\\'[\\w_]|[eEpP][-+])*)|(?P\\"([^\\\\\\n]|(\\\\(.|\\n)))*?\\")|(?P(L)?\\\'([^\\\\\\n]|(\\\\(.|\\n)))*?\\\')|(?P(/\\*(.|\\n)*?\\*/))|(?P(//[^\\n]*))|(?P[A-Za-z_][\\w_]*)|(?P\\#\\#)|(?P\\|\\|)|(?P\\+\\+)|(?P\\|=)|(?P\\*=)|(?P\\+=)|(?P<<=)|(?P>>=)|(?P\\#)|(?P\\+)|(?P\\*)|(?P\\|)|(?P\\^)|(?P\\?)|(?P\\()|(?P\\))|(?P\\[)|(?P\\])|(?P\\.)|(?P\\\\)|(?P->)|(?P-=)|(?P--)|(?P<<)|(?P<=)|(?P>>)|(?P>=)|(?P&&)|(?P&=)|(?P==)|(?P!=)|(?P^=)|(?P/=)|(?P%=)|(?P-)|(?P/)|(?P%)|(?P&)|(?P~)|(?P<)|(?P>)|(?P=)|(?P!)|(?P{)|(?P})|(?P,)|(?P;)|(?P:)|(?P\')|(?P")', [None, ('t_CPP_WS', 'CPP_WS'), None, ('t_CPP_LINECONT', 'CPP_LINECONT'), ('t_PP_NUMBER', 'PP_NUMBER'), None, ('t_CPP_STRING', 'CPP_STRING'), None, None, None, ('t_CPP_CHAR', 'CPP_CHAR'), None, None, None, None, ('t_CPP_COMMENT1', 'CPP_COMMENT1'), None, None, ('t_CPP_COMMENT2', 'CPP_COMMENT2'), None, (None, 'CPP_ID'), (None, 'CPP_DPOUND'), (None, 'CPP_LOGICALOR'), (None, 'CPP_PLUSPLUS'), (None, 'CPP_OREQUAL'), (None, 'CPP_MULTIPLYEQUAL'), (None, 'CPP_PLUSEQUAL'), (None, 'CPP_LSHIFTEQUAL'), (None, 'CPP_RSHIFTEQUAL'), (None, 'CPP_POUND'), (None, 'CPP_PLUS'), (None, 'CPP_STAR'), (None, 'CPP_BAR'), (None, 'CPP_HAT'), (None, 'CPP_QUESTION'), (None, 'CPP_LPAREN'), (None, 'CPP_RPAREN'), (None, 'CPP_LBRACKET'), (None, 'CPP_RBRACKET'), (None, 'CPP_DOT'), (None, 'CPP_BSLASH'), (None, 'CPP_DEREFERENCE'), (None, 'CPP_MINUSEQUAL'), (None, 'CPP_MINUSMINUS'), (None, 'CPP_LSHIFT'), (None, 'CPP_LESSEQUAL'), (None, 'CPP_RSHIFT'), (None, 'CPP_GREATEREQUAL'), (None, 'CPP_LOGICALAND'), (None, 'CPP_ANDEQUAL'), (None, 'CPP_EQUALITY'), (None, 'CPP_INEQUALITY'), (None, 'CPP_XOREQUAL'), (None, 'CPP_DIVIDEEQUAL'), (None, 'CPP_PERCENTEQUAL'), (None, 'CPP_MINUS'), (None, 'CPP_FSLASH'), (None, 'CPP_PERCENT'), (None, 'CPP_AMPERSAND'), (None, 'CPP_TILDE'), (None, 'CPP_LESS'), (None, 'CPP_GREATER'), (None, 'CPP_EQUAL'), (None, 'CPP_EXCLAMATION'), (None, 'CPP_LCURLY'), (None, 'CPP_RCURLY'), (None, 'CPP_COMMA'), (None, 'CPP_SEMICOLON'), (None, 'CPP_COLON'), (None, 'CPP_SQUOTE'), (None, 'CPP_DQUOTE')])]} _lexstateignore = {'INITIAL': ''} _lexstateerrorf = {'INITIAL': 't_error'} _lexstateeoff = {} diff --git a/pcpp/parser.py b/pcpp/parser.py index 8e6a10a..73618a3 100644 --- a/pcpp/parser.py +++ b/pcpp/parser.py @@ -27,7 +27,7 @@ # ----------------------------------------------------------------------------- tokens = ( - 'CPP_ID','CPP_INTEGER', 'CPP_FLOAT', 'CPP_STRING', 'CPP_CHAR', 'CPP_WS', 'CPP_LINECONT', 'CPP_COMMENT1', 'CPP_COMMENT2', + 'CPP_ID', 'PP_NUMBER', 'CPP_STRING', 'CPP_CHAR', 'CPP_WS', 'CPP_LINECONT', 'CPP_COMMENT1', 'CPP_COMMENT2', 'CPP_POUND','CPP_DPOUND', 'CPP_PLUS', 'CPP_MINUS', 'CPP_STAR', 'CPP_FSLASH', 'CPP_PERCENT', 'CPP_BAR', 'CPP_AMPERSAND', 'CPP_TILDE', 'CPP_HAT', 'CPP_LESS', 'CPP_GREATER', 'CPP_EQUAL', 'CPP_EXCLAMATION', 'CPP_QUESTION', 'CPP_LPAREN', 'CPP_RPAREN', 'CPP_LBRACKET', 'CPP_RBRACKET', 'CPP_LCURLY', 'CPP_RCURLY', @@ -111,15 +111,12 @@ def t_CPP_LINECONT(t): # Identifier t_CPP_ID = r'[A-Za-z_][\w_]*' -# Integer literal -def CPP_INTEGER(t): - r'(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)' +# Preprocessor number +def PP_NUMBER(t): + r"\.?\d(?:\.|[\w_]|'[\w_]|[eEpP][-+])*" return t -t_CPP_INTEGER = CPP_INTEGER - -# Floating literal -t_CPP_FLOAT = r'((\d+)(\.\d+)(e(\+|-)?(\d+))?|(\d+)e(\+|-)?(\d+))([lL]|[fF])?' +t_PP_NUMBER = PP_NUMBER # String literal def t_CPP_STRING(t): diff --git a/pcpp/parsetab.py b/pcpp/parsetab.py index ed627c4..406a798 100644 --- a/pcpp/parsetab.py +++ b/pcpp/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'leftCPP_COMMAleftCPP_QUESTIONCPP_COLONleftCPP_LOGICALORleftCPP_LOGICALANDleftCPP_BARleftCPP_HATleftCPP_AMPERSANDleftCPP_EQUALITYCPP_INEQUALITYleftCPP_LESSCPP_LESSEQUALCPP_GREATERCPP_GREATEREQUALleftCPP_LSHIFTCPP_RSHIFTleftCPP_PLUSCPP_MINUSleftCPP_STARCPP_FSLASHCPP_PERCENTrightUPLUSUMINUSCPP_EXCLAMATIONCPP_TILDECPP_AMPERSAND CPP_BAR CPP_CHAR CPP_COLON CPP_COMMA CPP_EQUALITY CPP_EXCLAMATION CPP_FSLASH CPP_GREATER CPP_GREATEREQUAL CPP_HAT CPP_ID CPP_INEQUALITY CPP_INTEGER CPP_LESS CPP_LESSEQUAL CPP_LOGICALAND CPP_LOGICALOR CPP_LPAREN CPP_LSHIFT CPP_MINUS CPP_PERCENT CPP_PLUS CPP_QUESTION CPP_RPAREN CPP_RSHIFT CPP_STAR CPP_STRING CPP_TILDEexpression : CPP_INTEGERexpression : CPP_CHAR\n expression : CPP_STRING\n | CPP_LESS expression CPP_GREATER\n expression : CPP_LPAREN expression CPP_RPARENexpression : CPP_PLUS expression %prec UPLUSexpression : CPP_MINUS expression %prec UMINUS\n expression : CPP_EXCLAMATION expression\n | CPP_TILDE expression\n \n expression : expression CPP_STAR expression\n | expression CPP_FSLASH expression\n | expression CPP_PERCENT expression\n | expression CPP_PLUS expression\n | expression CPP_MINUS expression\n | expression CPP_LSHIFT expression\n | expression CPP_RSHIFT expression\n | expression CPP_LESS expression\n | expression CPP_LESSEQUAL expression\n | expression CPP_GREATER expression\n | expression CPP_GREATEREQUAL expression\n | expression CPP_EQUALITY expression\n | expression CPP_INEQUALITY expression\n | expression CPP_AMPERSAND expression\n | expression CPP_HAT expression\n | expression CPP_BAR expression\n | expression CPP_LOGICALAND expression\n | expression CPP_LOGICALOR expression\n | expression CPP_COMMA expression\n expression : expression CPP_QUESTION expression CPP_COLON expressionexpression : CPP_ID CPP_LPAREN expression CPP_RPARENexpression : CPP_ID' +_lr_signature = 'leftCPP_COMMAleftCPP_QUESTIONCPP_COLONleftCPP_LOGICALORleftCPP_LOGICALANDleftCPP_BARleftCPP_HATleftCPP_AMPERSANDleftCPP_EQUALITYCPP_INEQUALITYleftCPP_LESSCPP_LESSEQUALCPP_GREATERCPP_GREATEREQUALleftCPP_LSHIFTCPP_RSHIFTleftCPP_PLUSCPP_MINUSleftCPP_STARCPP_FSLASHCPP_PERCENTrightUPLUSUMINUSCPP_EXCLAMATIONCPP_TILDECPP_AMPERSAND CPP_BAR CPP_CHAR CPP_COLON CPP_COMMA CPP_EQUALITY CPP_EXCLAMATION CPP_FSLASH CPP_GREATER CPP_GREATEREQUAL CPP_HAT CPP_ID CPP_INEQUALITY CPP_LESS CPP_LESSEQUAL CPP_LOGICALAND CPP_LOGICALOR CPP_LPAREN CPP_LSHIFT CPP_MINUS CPP_PERCENT CPP_PLUS CPP_QUESTION CPP_RPAREN CPP_RSHIFT CPP_STAR CPP_STRING CPP_TILDE PP_NUMBERexpression : PP_NUMBERexpression : CPP_CHAR\n expression : CPP_STRING\n | CPP_LESS expression CPP_GREATER\n expression : CPP_LPAREN expression CPP_RPARENexpression : CPP_PLUS expression %prec UPLUSexpression : CPP_MINUS expression %prec UMINUS\n expression : CPP_EXCLAMATION expression\n | CPP_TILDE expression\n \n expression : expression CPP_STAR expression\n | expression CPP_FSLASH expression\n | expression CPP_PERCENT expression\n | expression CPP_PLUS expression\n | expression CPP_MINUS expression\n | expression CPP_LSHIFT expression\n | expression CPP_RSHIFT expression\n | expression CPP_LESS expression\n | expression CPP_LESSEQUAL expression\n | expression CPP_GREATER expression\n | expression CPP_GREATEREQUAL expression\n | expression CPP_EQUALITY expression\n | expression CPP_INEQUALITY expression\n | expression CPP_AMPERSAND expression\n | expression CPP_HAT expression\n | expression CPP_BAR expression\n | expression CPP_LOGICALAND expression\n | expression CPP_LOGICALOR expression\n | expression CPP_COMMA expression\n expression : expression CPP_QUESTION expression CPP_COLON expressionexpression : CPP_ID CPP_LPAREN expression CPP_RPARENexpression : CPP_ID' -_lr_action_items = {'CPP_ID':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,]),'CPP_LSHIFT':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,18,-8,-6,18,-7,18,-9,18,-5,-4,-15,18,18,18,18,-12,18,18,18,-13,18,-11,18,18,-14,-10,18,18,18,-16,-30,18,]),'CPP_STRING':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,]),'CPP_LESSEQUAL':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,19,-8,-6,19,-7,19,-9,19,-5,-4,-15,-18,-20,19,19,-12,19,19,19,-13,19,-11,19,19,-14,-10,19,-19,-17,-16,-30,19,]),'CPP_GREATEREQUAL':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,20,-8,-6,20,-7,20,-9,20,-5,-4,-15,-18,-20,20,20,-12,20,20,20,-13,20,-11,20,20,-14,-10,20,-19,-17,-16,-30,20,]),'CPP_LOGICALOR':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,21,-8,-6,21,-7,21,-9,21,-5,-4,-15,-18,-20,-27,-26,-12,-23,21,-25,-13,-22,-11,-21,-24,-14,-10,21,-19,-17,-16,-30,21,]),'CPP_LOGICALAND':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,22,-8,-6,22,-7,22,-9,22,-5,-4,-15,-18,-20,22,-26,-12,-23,22,-25,-13,-22,-11,-21,-24,-14,-10,22,-19,-17,-16,-30,22,]),'CPP_EXCLAMATION':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,]),'CPP_PERCENT':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,23,-8,-6,23,-7,23,-9,23,-5,-4,23,23,23,23,23,-12,23,23,23,23,23,-11,23,23,23,-10,23,23,23,23,-30,23,]),'CPP_AMPERSAND':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,24,-8,-6,24,-7,24,-9,24,-5,-4,-15,-18,-20,24,24,-12,-23,24,24,-13,-22,-11,-21,24,-14,-10,24,-19,-17,-16,-30,24,]),'CPP_QUESTION':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,25,-8,-6,25,-7,25,-9,25,-5,-4,-15,-18,-20,-27,-26,-12,-23,25,-25,-13,-22,-11,-21,-24,-14,-10,25,-19,-17,-16,-30,-29,]),'CPP_BAR':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,26,-8,-6,26,-7,26,-9,26,-5,-4,-15,-18,-20,26,26,-12,-23,26,-25,-13,-22,-11,-21,-24,-14,-10,26,-19,-17,-16,-30,26,]),'$end':([1,2,5,7,10,13,14,16,38,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,0,-8,-6,-7,-9,-5,-4,-15,-18,-20,-27,-26,-12,-23,-25,-13,-22,-11,-21,-24,-14,-10,-28,-19,-17,-16,-30,-29,]),'CPP_PLUS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[4,-31,-3,4,4,-2,4,-1,4,4,27,4,4,-8,-6,27,-7,27,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,-9,27,-5,4,27,27,27,27,27,-12,27,27,27,-13,27,-11,27,27,-14,-10,27,27,27,27,-30,4,27,]),'CPP_INEQUALITY':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,28,-8,-6,28,-7,28,-9,28,-5,-4,-15,-18,-20,28,28,-12,28,28,28,-13,-22,-11,-21,28,-14,-10,28,-19,-17,-16,-30,28,]),'CPP_CHAR':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,]),'CPP_LPAREN':([0,1,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[6,12,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,]),'CPP_FSLASH':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,29,-8,-6,29,-7,29,-9,29,-5,-4,29,29,29,29,29,-12,29,29,29,29,29,-11,29,29,29,-10,29,29,29,29,-30,29,]),'CPP_INTEGER':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,]),'CPP_HAT':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,31,-8,-6,31,-7,31,-9,31,-5,-4,-15,-18,-20,31,31,-12,-23,31,31,-13,-22,-11,-21,-24,-14,-10,31,-19,-17,-16,-30,31,]),'CPP_EQUALITY':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,30,-8,-6,30,-7,30,-9,30,-5,-4,-15,-18,-20,30,30,-12,30,30,30,-13,-22,-11,-21,30,-14,-10,30,-19,-17,-16,-30,30,]),'CPP_MINUS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[8,-31,-3,8,8,-2,8,-1,8,8,32,8,8,-8,-6,32,-7,32,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,-9,32,-5,8,32,32,32,32,32,-12,32,32,32,-13,32,-11,32,32,-14,-10,32,32,32,32,-30,8,32,]),'CPP_STAR':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,33,-8,-6,33,-7,33,-9,33,-5,-4,33,33,33,33,33,-12,33,33,33,33,33,-11,33,33,33,-10,33,33,33,33,-30,33,]),'CPP_COMMA':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,34,-8,-6,34,-7,34,-9,34,-5,-4,-15,-18,-20,-27,-26,-12,-23,34,-25,-13,-22,-11,-21,-24,-14,-10,-28,-19,-17,-16,-30,-29,]),'CPP_GREATER':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,35,-8,-6,35,-7,41,-9,35,-5,-4,-15,-18,-20,35,35,-12,35,35,35,-13,35,-11,35,35,-14,-10,35,-19,-17,-16,-30,35,]),'CPP_RSHIFT':([1,2,5,7,10,13,14,15,16,17,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,37,-8,-6,37,-7,37,-9,37,-5,-4,-15,37,37,37,37,-12,37,37,37,-13,37,-11,37,37,-14,-10,37,37,37,-16,-30,37,]),'CPP_LESS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[9,-31,-3,9,9,-2,9,-1,9,9,36,9,9,-8,-6,36,-7,36,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,-9,36,-5,-4,-15,-18,-20,36,36,-12,36,36,36,-13,36,-11,36,36,-14,-10,36,-19,-17,-16,-30,9,36,]),'CPP_COLON':([1,2,5,7,13,14,16,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,-8,-6,-7,-9,-5,-4,-15,-18,-20,-27,-26,-12,-23,63,-25,-13,-22,-11,-21,-24,-14,-10,-28,-19,-17,-16,-30,-29,]),'CPP_TILDE':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,]),'CPP_RPAREN':([1,2,5,7,13,14,15,16,38,39,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,64,],[-31,-3,-2,-1,-8,-6,40,-7,-9,62,-5,-4,-15,-18,-20,-27,-26,-12,-23,-25,-13,-22,-11,-21,-24,-14,-10,-28,-19,-17,-16,-30,-29,]),} +_lr_action_items = {'PP_NUMBER':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,]),'CPP_CHAR':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,]),'CPP_STRING':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,]),'CPP_LESS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[5,19,-1,-2,-3,5,5,5,5,5,5,-31,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,19,19,-6,-7,-8,-9,5,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,19,19,19,19,19,19,19,19,19,-4,-5,19,5,-30,19,]),'CPP_LPAREN':([0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[6,6,6,6,6,6,6,38,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,]),'CPP_PLUS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[7,15,-1,-2,-3,7,7,7,7,7,7,-31,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,15,15,-6,-7,-8,-9,7,-10,-11,-12,-13,-14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,7,-5,15,7,-30,15,]),'CPP_MINUS':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,],[8,16,-1,-2,-3,8,8,8,8,8,8,-31,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,-6,-7,-8,-9,8,-10,-11,-12,-13,-14,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,8,-5,16,8,-30,16,]),'CPP_EXCLAMATION':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,]),'CPP_TILDE':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,]),'CPP_ID':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,]),'$end':([1,2,3,4,11,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,63,64,],[0,-1,-2,-3,-31,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-4,-5,-30,-29,]),'CPP_STAR':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[12,-1,-2,-3,-31,12,12,-6,-7,-8,-9,-10,-11,-12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,-4,-5,12,-30,12,]),'CPP_FSLASH':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[13,-1,-2,-3,-31,13,13,-6,-7,-8,-9,-10,-11,-12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,-4,-5,13,-30,13,]),'CPP_PERCENT':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[14,-1,-2,-3,-31,14,14,-6,-7,-8,-9,-10,-11,-12,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,-4,-5,14,-30,14,]),'CPP_LSHIFT':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[17,-1,-2,-3,-31,17,17,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,17,17,17,17,17,17,17,17,17,17,17,17,17,-4,-5,17,-30,17,]),'CPP_RSHIFT':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[18,-1,-2,-3,-31,18,18,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,18,18,18,18,18,18,18,18,18,18,18,18,18,-4,-5,18,-30,18,]),'CPP_LESSEQUAL':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[20,-1,-2,-3,-31,20,20,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,20,20,20,20,20,20,20,20,20,-4,-5,20,-30,20,]),'CPP_GREATER':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[21,-1,-2,-3,-31,59,21,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,21,21,21,21,21,21,21,21,21,-4,-5,21,-30,21,]),'CPP_GREATEREQUAL':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[22,-1,-2,-3,-31,22,22,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,22,22,22,22,22,22,22,22,22,-4,-5,22,-30,22,]),'CPP_EQUALITY':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[23,-1,-2,-3,-31,23,23,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,23,23,23,23,23,23,23,-4,-5,23,-30,23,]),'CPP_INEQUALITY':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[24,-1,-2,-3,-31,24,24,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,24,24,24,24,24,24,24,-4,-5,24,-30,24,]),'CPP_AMPERSAND':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[25,-1,-2,-3,-31,25,25,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,25,25,25,25,25,25,-4,-5,25,-30,25,]),'CPP_HAT':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[26,-1,-2,-3,-31,26,26,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,26,26,26,26,26,-4,-5,26,-30,26,]),'CPP_BAR':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[27,-1,-2,-3,-31,27,27,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,27,27,27,27,-4,-5,27,-30,27,]),'CPP_LOGICALAND':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[28,-1,-2,-3,-31,28,28,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,28,28,28,-4,-5,28,-30,28,]),'CPP_LOGICALOR':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[29,-1,-2,-3,-31,29,29,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,29,29,-4,-5,29,-30,29,]),'CPP_COMMA':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[30,-1,-2,-3,-31,30,30,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,30,-4,-5,30,-30,-29,]),'CPP_QUESTION':([1,2,3,4,11,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,],[31,-1,-2,-3,-31,31,31,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,31,31,-4,-5,31,-30,-29,]),'CPP_RPAREN':([2,3,4,11,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,63,64,],[-1,-2,-3,-31,60,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-4,-5,63,-30,-29,]),'CPP_COLON':([2,3,4,11,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,],[-1,-2,-3,-31,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,62,-4,-5,-30,-29,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'expression':([0,3,4,6,8,9,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41,63,],[10,13,14,15,16,17,38,39,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,59,64,]),} +_lr_goto_items = {'expression':([0,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,38,59,62,],[1,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,61,48,64,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,35 +27,35 @@ del _lr_goto_items _lr_productions = [ ("S' -> expression","S'",1,None,None,None), - ('expression -> CPP_INTEGER','expression',1,'p_expression_number','evaluator.py',396), - ('expression -> CPP_CHAR','expression',1,'p_expression_character','evaluator.py',400), - ('expression -> CPP_STRING','expression',1,'p_expression_string','evaluator.py',405), - ('expression -> CPP_LESS expression CPP_GREATER','expression',3,'p_expression_string','evaluator.py',406), - ('expression -> CPP_LPAREN expression CPP_RPAREN','expression',3,'p_expression_group','evaluator.py',411), - ('expression -> CPP_PLUS expression','expression',2,'p_expression_uplus','evaluator.py',415), - ('expression -> CPP_MINUS expression','expression',2,'p_expression_uminus','evaluator.py',419), - ('expression -> CPP_EXCLAMATION expression','expression',2,'p_expression_unop','evaluator.py',424), - ('expression -> CPP_TILDE expression','expression',2,'p_expression_unop','evaluator.py',425), - ('expression -> expression CPP_STAR expression','expression',3,'p_expression_binop','evaluator.py',437), - ('expression -> expression CPP_FSLASH expression','expression',3,'p_expression_binop','evaluator.py',438), - ('expression -> expression CPP_PERCENT expression','expression',3,'p_expression_binop','evaluator.py',439), - ('expression -> expression CPP_PLUS expression','expression',3,'p_expression_binop','evaluator.py',440), - ('expression -> expression CPP_MINUS expression','expression',3,'p_expression_binop','evaluator.py',441), - ('expression -> expression CPP_LSHIFT expression','expression',3,'p_expression_binop','evaluator.py',442), - ('expression -> expression CPP_RSHIFT expression','expression',3,'p_expression_binop','evaluator.py',443), - ('expression -> expression CPP_LESS expression','expression',3,'p_expression_binop','evaluator.py',444), - ('expression -> expression CPP_LESSEQUAL expression','expression',3,'p_expression_binop','evaluator.py',445), - ('expression -> expression CPP_GREATER expression','expression',3,'p_expression_binop','evaluator.py',446), - ('expression -> expression CPP_GREATEREQUAL expression','expression',3,'p_expression_binop','evaluator.py',447), - ('expression -> expression CPP_EQUALITY expression','expression',3,'p_expression_binop','evaluator.py',448), - ('expression -> expression CPP_INEQUALITY expression','expression',3,'p_expression_binop','evaluator.py',449), - ('expression -> expression CPP_AMPERSAND expression','expression',3,'p_expression_binop','evaluator.py',450), - ('expression -> expression CPP_HAT expression','expression',3,'p_expression_binop','evaluator.py',451), - ('expression -> expression CPP_BAR expression','expression',3,'p_expression_binop','evaluator.py',452), - ('expression -> expression CPP_LOGICALAND expression','expression',3,'p_expression_binop','evaluator.py',453), - ('expression -> expression CPP_LOGICALOR expression','expression',3,'p_expression_binop','evaluator.py',454), - ('expression -> expression CPP_COMMA expression','expression',3,'p_expression_binop','evaluator.py',455), - ('expression -> expression CPP_QUESTION expression CPP_COLON expression','expression',5,'p_expression_conditional','evaluator.py',501), - ('expression -> CPP_ID CPP_LPAREN expression CPP_RPAREN','expression',4,'p_expression_function_call','evaluator.py',513), - ('expression -> CPP_ID','expression',1,'p_expression_identifier','evaluator.py',520), + ('expression -> PP_NUMBER','expression',1,'p_expression_number','evaluator.py',397), + ('expression -> CPP_CHAR','expression',1,'p_expression_character','evaluator.py',405), + ('expression -> CPP_STRING','expression',1,'p_expression_string','evaluator.py',410), + ('expression -> CPP_LESS expression CPP_GREATER','expression',3,'p_expression_string','evaluator.py',411), + ('expression -> CPP_LPAREN expression CPP_RPAREN','expression',3,'p_expression_group','evaluator.py',416), + ('expression -> CPP_PLUS expression','expression',2,'p_expression_uplus','evaluator.py',420), + ('expression -> CPP_MINUS expression','expression',2,'p_expression_uminus','evaluator.py',424), + ('expression -> CPP_EXCLAMATION expression','expression',2,'p_expression_unop','evaluator.py',429), + ('expression -> CPP_TILDE expression','expression',2,'p_expression_unop','evaluator.py',430), + ('expression -> expression CPP_STAR expression','expression',3,'p_expression_binop','evaluator.py',442), + ('expression -> expression CPP_FSLASH expression','expression',3,'p_expression_binop','evaluator.py',443), + ('expression -> expression CPP_PERCENT expression','expression',3,'p_expression_binop','evaluator.py',444), + ('expression -> expression CPP_PLUS expression','expression',3,'p_expression_binop','evaluator.py',445), + ('expression -> expression CPP_MINUS expression','expression',3,'p_expression_binop','evaluator.py',446), + ('expression -> expression CPP_LSHIFT expression','expression',3,'p_expression_binop','evaluator.py',447), + ('expression -> expression CPP_RSHIFT expression','expression',3,'p_expression_binop','evaluator.py',448), + ('expression -> expression CPP_LESS expression','expression',3,'p_expression_binop','evaluator.py',449), + ('expression -> expression CPP_LESSEQUAL expression','expression',3,'p_expression_binop','evaluator.py',450), + ('expression -> expression CPP_GREATER expression','expression',3,'p_expression_binop','evaluator.py',451), + ('expression -> expression CPP_GREATEREQUAL expression','expression',3,'p_expression_binop','evaluator.py',452), + ('expression -> expression CPP_EQUALITY expression','expression',3,'p_expression_binop','evaluator.py',453), + ('expression -> expression CPP_INEQUALITY expression','expression',3,'p_expression_binop','evaluator.py',454), + ('expression -> expression CPP_AMPERSAND expression','expression',3,'p_expression_binop','evaluator.py',455), + ('expression -> expression CPP_HAT expression','expression',3,'p_expression_binop','evaluator.py',456), + ('expression -> expression CPP_BAR expression','expression',3,'p_expression_binop','evaluator.py',457), + ('expression -> expression CPP_LOGICALAND expression','expression',3,'p_expression_binop','evaluator.py',458), + ('expression -> expression CPP_LOGICALOR expression','expression',3,'p_expression_binop','evaluator.py',459), + ('expression -> expression CPP_COMMA expression','expression',3,'p_expression_binop','evaluator.py',460), + ('expression -> expression CPP_QUESTION expression CPP_COLON expression','expression',5,'p_expression_conditional','evaluator.py',506), + ('expression -> CPP_ID CPP_LPAREN expression CPP_RPAREN','expression',4,'p_expression_function_call','evaluator.py',518), + ('expression -> CPP_ID','expression',1,'p_expression_identifier','evaluator.py',525), ] diff --git a/tests/issue0079.py b/tests/issue0079.py new file mode 100644 index 0000000..98c83f4 --- /dev/null +++ b/tests/issue0079.py @@ -0,0 +1,39 @@ +from __future__ import absolute_import, print_function +import unittest, time +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + +class runner(object): + def runTest(self): + from pcpp import Preprocessor, OutputDirective, Action + import os, sys, re + + p = Preprocessor() + p.parse(self.input) + oh = StringIO() + p.write(oh) + print("ok") + if oh.getvalue() != self.output: + print("Should be:\n" + self.output + "EOF\n", file = sys.stderr) + print("\nWas:\n" + oh.getvalue()+"EOF\n", file = sys.stderr) + self.assertEqual(p.return_code, 0) + self.assertEqual(oh.getvalue(), self.output) + +class pp_number_pasting(unittest.TestCase, runner): + input = r"""#define CAT_(A,B)A##B +#define CAT(A,B)CAT_(A,B) +#define Ox 0x +#if CAT(Ox,1) +PP_NUMBER pasted ok +#else +PP_NUMBER paste fail +#endif +""" + output = r""" + + + +PP_NUMBER pasted ok +""" \ No newline at end of file