From: <bl...@us...> - 2003-08-26 18:26:21
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/parser In directory sc8-pr-cvs1:/tmp/cvs-serv1555/src/pyrfta/test/rfta/parser Modified Files: grammar.py grammartest.py Log Message: * allowed an extra id before the class name in class definition. * a few extra nodes added to wrap some expressions. Index: grammar.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/parser/grammar.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** grammar.py 26 Aug 2003 08:30:04 -0000 1.2 --- grammar.py 26 Aug 2003 17:53:49 -0000 1.3 *************** *** 93,97 **** id_expression_pi = longuest_f( qualified_id_p, ! node_f( 'unqualified_id', unqualified_id_pi ) ) # C++ Standard p65 --- 93,97 ---- id_expression_pi = longuest_f( qualified_id_p, ! node_f( 'unqualified_id', unqualified_id_pi ) ) # C++ Standard p65 *************** *** 99,103 **** | ( symbol_f('this') >> rename_last_cmd( 'this_ref' ) ) | node_f('braced_expr', symbol_f('(') >> expression_pi >> symbol_f(')') ) ! | id_expression_pi ) # Notes: missing template in scope case --- 99,103 ---- | ( symbol_f('this') >> rename_last_cmd( 'this_ref' ) ) | node_f('braced_expr', symbol_f('(') >> expression_pi >> symbol_f(')') ) ! | node_f( 'id_expression', id_expression_pi ) ) # Notes: missing template in scope case *************** *** 582,586 **** constant_initializer_p = symbol_f('=') >> constant_expression_pi ! pure_specifier_p = symbol_f('=') >> ZeroParser() # added, somehow the grammar is not parsing this --- 582,586 ---- constant_initializer_p = symbol_f('=') >> constant_expression_pi ! pure_specifier_p = node_f( 'pure_specifier', symbol_f('=') >> ZeroParser() ) # added, somehow the grammar is not parsing this *************** *** 625,629 **** class_head_name_p = node_f( 'class_name', ! optional_f( nested_name_specifier_pi ) >> (id_p | template_id_pi) ) class_head_p = proxy_f( class_key_pi >> optional_f( class_head_name_p ) >> optional_f( base_clause_p ) ) --- 625,631 ---- class_head_name_p = node_f( 'class_name', ! optional_alternative_f( node_f('dll_macro', id_p ), ! optional_f( nested_name_specifier_pi ) ! >> (id_p | template_id_pi) ) ) class_head_p = proxy_f( class_key_pi >> optional_f( class_head_name_p ) >> optional_f( base_clause_p ) ) *************** *** 650,654 **** mem_initializer_id >> '(' >> optional_f( expression_list_pi ) >> ')' ) ! ctor_initializer_p.setParser( symbol_f( ':' ) >> list_f( mem_initializer_p, ',' ) ) # ############### A.8.2: Classes, OverLoading ################## --- 652,657 ---- mem_initializer_id >> '(' >> optional_f( expression_list_pi ) >> ')' ) ! ctor_initializer_p.setParser( node_f( 'constructor_initializer', ! symbol_f( ':' ) >> list_f( mem_initializer_p, ',' ) ) ) # ############### A.8.2: Classes, OverLoading ################## Index: grammartest.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/parser/grammartest.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** grammartest.py 26 Aug 2003 08:30:04 -0000 1.2 --- grammartest.py 26 Aug 2003 17:53:50 -0000 1.3 *************** *** 27,30 **** --- 27,33 ---- return TestNode( 'declarator_id', TestNode( 'unqualified_id', *ids ) ) + def unqualified_id_expression_n( identifier ): + return TestNode( 'id_expression', unqualified_id_n( identifier ) ) + class GrammarTest(unittest.TestCase,ParserTestHelperMixIn): *************** *** 88,92 **** TestNode( 'expression', ('this_ref','this') ), ')' ) ) ! self.checkParser( '::my_id', grammar.primary_expression_p ) self.checkParser( 'MyNamespace::my_var', grammar.primary_expression_p ) self.checkParser( '::MyNamespace::MyClass::member_', grammar.primary_expression_p ) --- 91,97 ---- TestNode( 'expression', ('this_ref','this') ), ')' ) ) ! self.checkProducedNodes( '::my_id', grammar.primary_expression_p, ! TestNode( 'id_expression', ! TestNode( 'qualified_id', '::', id_n('my_id') ) ) ) self.checkParser( 'MyNamespace::my_var', grammar.primary_expression_p ) self.checkParser( '::MyNamespace::MyClass::member_', grammar.primary_expression_p ) *************** *** 95,111 **** self.checkProducedNodes( 'xyz', grammar.primary_expression_p, ! TestNode( 'unqualified_id', id_n( 'xyz' ) ) ) self.checkProducedNodes( 'operator =', grammar.primary_expression_p, ! TestNode( 'unqualified_id', ! TestNode( 'operator_function_ref', 'operator', '=' ) ) ) self.checkProducedNodes( 'operator int', grammar.primary_expression_p, ! TestNode( 'unqualified_id', ! TestNode( 'conversion_function_ref', ! 'operator', ! TestNode( 'conversion_type', fundamental_type_specifier_n('int') ) ) ) ) self.checkProducedNodes( '~ClassName()', grammar.primary_expression_p, ! TestNode( 'unqualified_id', ! TestNode( 'destructor_ref', '~', id_n('ClassName') ) ) ) ! def testPostFixExpressionSuffix( self ): self.checkProducedNodes( '[123]', grammar.array_operator_suffix_p, --- 100,118 ---- self.checkProducedNodes( 'xyz', grammar.primary_expression_p, ! unqualified_id_expression_n( 'xyz' ) ) self.checkProducedNodes( 'operator =', grammar.primary_expression_p, ! TestNode( 'id_expression', ! TestNode( 'unqualified_id', ! TestNode( 'operator_function_ref', 'operator', '=' ) ) ) ) self.checkProducedNodes( 'operator int', grammar.primary_expression_p, ! TestNode( 'id_expression', ! TestNode( 'unqualified_id', ! TestNode( 'conversion_function_ref', ! 'operator', ! TestNode( 'conversion_type', fundamental_type_specifier_n('int') ) ) ) ) ) self.checkProducedNodes( '~ClassName()', grammar.primary_expression_p, ! TestNode( 'id_expression', ! TestNode( 'unqualified_id', ! TestNode( 'destructor_ref', '~', id_n('ClassName') ) ) ) ) def testPostFixExpressionSuffix( self ): self.checkProducedNodes( '[123]', grammar.array_operator_suffix_p, *************** *** 130,134 **** TestNode( 'array_access', TestNode( 'array_access', ! JokerTestNode( 'unqualified_id' ), TestNode('array_index', '[', JokerTestNode( 'expression' ), ']') ), #[1] TestNode('array_index', '[', JokerTestNode( 'expression' ), ']') ) ) #[2] --- 137,141 ---- TestNode( 'array_access', TestNode( 'array_access', ! JokerTestNode( 'id_expression' ), TestNode('array_index', '[', JokerTestNode( 'expression' ), ']') ), #[1] TestNode('array_index', '[', JokerTestNode( 'expression' ), ']') ) ) #[2] *************** *** 158,162 **** self.checkParser( 'delete ++p', grammar.delete_expression_p ) self.checkProducedNodes( '::delete [] p', grammar.delete_expression_p, ! TestNode( 'delete_operator', '::', 'delete', '[', ']', unqualified_id_n('p') ) ) self.checkParser( 'delete x.z', grammar.delete_expression_p ) --- 165,170 ---- self.checkParser( 'delete ++p', grammar.delete_expression_p ) self.checkProducedNodes( '::delete [] p', grammar.delete_expression_p, ! TestNode( 'delete_operator', '::', 'delete', '[', ']', ! unqualified_id_expression_n('p') ) ) self.checkParser( 'delete x.z', grammar.delete_expression_p ) *************** *** 178,185 **** TestNode( 'expression_list', TestNode( 'assignment_expression', ! unqualified_id_n('__FILE__') ), ',', TestNode( 'assignment_expression', ! unqualified_id_n('__LINE__') ) ), ')'), TestNode( 'new_type_id', fundamental_type_n('int') ), --- 186,193 ---- TestNode( 'expression_list', TestNode( 'assignment_expression', ! unqualified_id_expression_n('__FILE__') ), ',', TestNode( 'assignment_expression', ! unqualified_id_expression_n('__LINE__') ) ), ')'), TestNode( 'new_type_id', fundamental_type_n('int') ), *************** *** 204,212 **** TestNode( 'unary_operator', '++', ! unqualified_id_n('my_variable') ) ) self.checkProducedNodes( '!my_variable', grammar.unary_expression_p, TestNode( 'unary_operator', '!', ! unqualified_id_n('my_variable') ) ) self.checkParser( '--my_variable', grammar.unary_expression_p ) self.checkParser( '-my_variable', grammar.unary_expression_p ) --- 212,220 ---- TestNode( 'unary_operator', '++', ! unqualified_id_expression_n('my_variable') ) ) self.checkProducedNodes( '!my_variable', grammar.unary_expression_p, TestNode( 'unary_operator', '!', ! unqualified_id_expression_n('my_variable') ) ) self.checkParser( '--my_variable', grammar.unary_expression_p ) self.checkParser( '-my_variable', grammar.unary_expression_p ) *************** *** 215,219 **** 'sizeof', TestNode( 'unary_operator', '!', ! unqualified_id_n('my_variable') ) ) ) self.checkProducedNodes( 'sizeof(++my_variable)', grammar.unary_expression_p, TestNode( 'sizeof_operator', --- 223,227 ---- 'sizeof', TestNode( 'unary_operator', '!', ! unqualified_id_expression_n('my_variable') ) ) ) self.checkProducedNodes( 'sizeof(++my_variable)', grammar.unary_expression_p, TestNode( 'sizeof_operator', *************** *** 223,227 **** TestNode( 'expression', TestNode( 'unary_operator', '++', ! unqualified_id_n('my_variable') ) ), ')' ) ) ) self.checkParser( 'new int[10]', grammar.unary_expression_p ) --- 231,235 ---- TestNode( 'expression', TestNode( 'unary_operator', '++', ! unqualified_id_expression_n('my_variable') ) ), ')' ) ) ) self.checkParser( 'new int[10]', grammar.unary_expression_p ) *************** *** 311,315 **** def testConstantExpressionParser( self ): self.checkProducedNodes( 'x', grammar.constant_expression_pi, ! TestNode( 'constant_expression', unqualified_id_n('x') ) ) # Statement --- 319,323 ---- def testConstantExpressionParser( self ): self.checkProducedNodes( 'x', grammar.constant_expression_pi, ! TestNode( 'constant_expression', unqualified_id_expression_n('x') ) ) # Statement *************** *** 699,702 **** --- 707,714 ---- # Class + def testPureSpecifier( self ): + self.checkProducedNodes( ' = 0', grammar.pure_specifier_p, + TestNode( 'pure_specifier', '=', int_n(0) ) ) + def testBaseClauseParser( self ): self.checkParser( ": Parent1", grammar.base_clause_p ) *************** *** 708,711 **** --- 720,724 ---- self.checkParser( "class MyClass : public Parent", grammar.class_head_p ) self.checkParser( "class MyNamespace::MyClass : public Parent, Parent2Impl", grammar.class_head_p ) + self.checkParser( 'class EXPORT_MACRO MyClass : public Parent', grammar.class_head_p ) def testMemInitializer( self ): *************** *** 716,719 **** --- 729,740 ---- TestNode('mem_initializer_id', '::', id_n('Tools'), '::', id_n('Base') ), '(', JokerTestNode('expression_list', ), ')' ) ) + + def testCtorInitializer( self ): + self.checkProducedNodes( ': x_(0), y_(0)', grammar.ctor_initializer_p, + TestNode( 'constructor_initializer', + ':', + JokerTestNode( 'mem_initializer' ), + ',', + JokerTestNode( 'mem_initializer' ) ) ) def testMemberDeclarationParser( self ): |