|
From: <bl...@us...> - 2003-08-03 08:50:33
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv9037/src/pyrfta/test/rfta
Modified Files:
generateparserdebuginfo.py parser.py parsertest.py
Log Message:
* added grammar for expression
* added one_of_p() parser
* added some missing symbols to tokenizer
Index: generateparserdebuginfo.py
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/generateparserdebuginfo.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** generateparserdebuginfo.py 2 Aug 2003 21:29:08 -0000 1.1
--- generateparserdebuginfo.py 3 Aug 2003 08:50:30 -0000 1.2
***************
*** 3,7 ****
import string
! factories = string.split( 'make_p terminal_p symbol_p maybe_p repeat_p list_p anyuntil_p proxy_p' )
for var in dir(parser):
--- 3,7 ----
import string
! factories = string.split( 'make_p terminal_p symbol_p maybe_p repeat_p list_p anyuntil_p proxy_p one_of_p' )
for var in dir(parser):
Index: parser.py
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/parser.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** parser.py 2 Aug 2003 21:29:08 -0000 1.6
--- parser.py 3 Aug 2003 08:50:30 -0000 1.7
***************
*** 83,87 ****
( FLOAT, '([0-9]+)?\\.[0-9]+(e[-+]?[0-9]+)?[fFL]?' ),
( FLOAT, '[0-9]+e[-+]?[0-9]+[fFL]?' ),
! ( SYMBOL, self._makeChoice( ':: << >> <= >= \\|\\| && &= \\|= \\+= -= /= \\*= \\^=' ) ),
( SYMBOL, self._makeChoice( '\\( \\) \\[ \\] \\{ \\} ~ / - \\+ / \\* = \\^ % < > & \\| ; , : \\?' ) ),
( CPP_COMMENT, '//' ),
--- 83,87 ----
( FLOAT, '([0-9]+)?\\.[0-9]+(e[-+]?[0-9]+)?[fFL]?' ),
( FLOAT, '[0-9]+e[-+]?[0-9]+[fFL]?' ),
! ( SYMBOL, self._makeChoice( '>>= <<= :: << >> <= >= \\|\\| && &= \\|= \\+= -= /= \\*= \\^= %=' ) ),
( SYMBOL, self._makeChoice( '\\( \\) \\[ \\] \\{ \\} ~ / - \\+ / \\* = \\^ % < > & \\| ; , : \\?' ) ),
( CPP_COMMENT, '//' ),
***************
*** 698,701 ****
--- 698,722 ----
self.parser = parser
+ class OneOfParser(Parser):
+ def __init__( self, symbols ):
+ Parser.__init__( self )
+ self.symbols = string.split( symbols )
+
+ def parse( self, scanner ):
+ scanner.enterParser( self )
+ token = scanner.getNextToken()
+ if token.getType() != SYMBOL or token.getText() not in self.symbols:
+ return self.notMatched( scanner )
+ return self.matched( scanner, TokenNode( token ) )
+
+ def __str__( self ):
+ return 'one_of(%s)' % string.join( self.symbols, ' ' )
+
+ def useShortDebugTrace( self ):
+ return True
+
+ def getDebugInfo( self ):
+ return str(self)
+
class InlineChildAction(Action):
def __init__( self, node_index ):
***************
*** 802,805 ****
--- 823,829 ----
return ProxyParser()
+ def one_of_p( symbols ):
+ return OneOfParser( symbols )
+
id_p = TerminalParser( IDENTIFIER )
***************
*** 889,905 ****
# ############################## A.5: Expressions ############################
# A.5, C++PL3 p.798-802
- constant_expression_p = terminal_p(INTEGER) | terminal_p(CHAR) # dummy
! # dummy
! assignment_expression_p = constant_expression_p
! ##assignment_expression_p = proxy_p()
##
! ##assignment_expression_p.setParser( conditional_expression_p \
! ## | ( logical_or_expression_p >> assignement_operator_p >> assignment_expression_p ) \
! ## | throw_expression_p )
! # dummy
! expression_list_p = constant_expression_p
# ############################## A.6: Statements ############################
--- 913,1066 ----
# ############################## A.5: Expressions ############################
# A.5, C++PL3 p.798-802
! operator_function_id_p = proxy_p()
! conversion_function_id_p = proxy_p()
! simple_type_specifier_p = proxy_p()
! ptr_operator_p = proxy_p()
! type_specifier_seq_p = proxy_p()
! throw_expression_p = proxy_p()
! expression_p = proxy_p()
! expression_list_p = proxy_p()
! cast_expression_p = proxy_p()
! assignment_expression_p = proxy_p()
! unary_expression_p = proxy_p()
! constant_expression_p = proxy_p()
!
! literal_expression_p = terminal_p(INTEGER) | terminal_p(CHAR) | terminal_p(FLOAT)
!
! # Notes: qualified_id can not include 'template' => A::template B::zozo is not parsed (IT SHOULD BE)
! qualified_id_p = nested_id_p >> maybe_p( symbol_p('template' ) >> id_p )
!
! # Notes: destructor and template id not included
! unqualified_id_p = id_p \
! | operator_function_id_p \
! | conversion_function_id_p
! # | ( symbol_p('~') >> id_p ) \
! # | template_id_p
!
!
! id_expression_p = unqualified_id_p | qualified_id_p
!
! primary_expression_p = literal_expression_p \
! | 'this' \
! | (symbol_p('::') >> id_p) \
! | (symbol_p('::') >> operator_function_id_p) \
! | (symbol_p('::') >> qualified_id_p) \
! | (symbol_p('(') >> expression_p >> ')' ) \
! | id_expression_p
!
! # Notes: missing template in scope case
! pseudo_destructor_name_p = maybe_p( nested_id_p >> '::' ) >> symbol_p('~') >> id_p
!
! instance_accessor_p = one_of_p('. ->')
!
! cast_keywords_p = one_of_p('dynamic_cast static_cast reinterpret_cast const_cast')
!
! # Notes: could not find actual grammar declaration. Fill in with a dummy rule
! type_id_p = nested_id_p
!
! # Notes: not included:
! # typename with template in scope
! #
! postfix_expression_p = proxy_p()
! postfix_expression_p.setParser( primary_expression_p
! | (postfix_expression_p >> '[' >> expression_p >> ']') # operator []
! | (postfix_expression_p >> '(' >> maybe_p( expression_list_p ) >> ')') # operator ()
! | (simple_type_specifier_p >> '(' >> maybe_p( expression_list_p ) >> ')') # simple type construction
! | (symbol_p('typename') >> nested_id_p >> '(' >> maybe_p( expression_list_p ) >> ')') # template construction
! | (postfix_expression_p >> instance_accessor_p >> maybe_p( 'template' ) >> maybe_p( '::' ) >> id_expression_p) # instance . id or instance -> id
! | (postfix_expression_p >> instance_accessor_p >> pseudo_destructor_name_p ) # destructor call
! | (postfix_expression_p >> (symbol_p('++') | '--'))
! | (cast_keywords_p >> '<' >> type_id_p >> '>' >> '(' >> expression_p >> ')')
! | (symbol_p('typeid') >> '(' >> expression_p >> ')')
! | (symbol_p('typeid') >> '(' >> type_id_p >> ')') )
!
! cast_expression_p = unary_expression_p \
! | (symbol_p('(') >> type_id_p >> ')')
!
! delete_expression_p = maybe_p( '::') >> 'delete' >> maybe_p('[]') >> cast_expression_p
!
! new_initializer_p = symbol_p('(') >> maybe_p( expression_list_p ) >> ')'
!
! expression_list_p.setParser( list_p( assignment_expression_p, ',' ) )
!
! direct_new_declarator_p = repeat_p( 1, symbol_p('[') >> expression_p >> ']' ) \
! >> maybe_p( symbol_p('[') >> constant_expression_p >> ']' )
!
! new_declarator_p = proxy_p()
! new_declarator_p.setParser( (ptr_operator_p >> maybe_p( new_declarator_p ))
! | direct_new_declarator_p )
!
! new_type_id_p = type_specifier_seq_p >> maybe_p( new_declarator_p )
!
! new_placement_p = symbol_p( '(' ) >> expression_list_p >> ')'
!
! new_expression_p = (maybe_p( '::' ) >> 'new' >> maybe_p(new_placement_p) >> new_type_id_p >> maybe_p(new_initializer_p)) \
! | (maybe_p( '::' ) >> 'new' >> maybe_p(new_placement_p) >> '(' >> new_type_id_p >> ')' >> maybe_p(new_initializer_p))
!
! unary_operator_p = one_of_p( '* & + - ! ~' )
!
! unary_expression_p.setParser( postfix_expression_p
! | ( (symbol_p('++') | '--') >> cast_expression_p )
! | (unary_operator_p >> cast_expression_p)
! | (symbol_p( 'sizeof' ) >> unary_expression_p)
! | (symbol_p( 'sizeof' ) >> '(' >> unary_expression_p >> ')' )
! | new_expression_p
! | delete_expression_p )
!
! pm_expression_p = proxy_p()
! pm_expression_p.setParser( cast_expression_p
! | (pm_expression_p >> instance_accessor_p >> '*' >> cast_expression_p) )
!
! ##multiplicative_expression_p = proxy_p()
! ##multiplicative_expression_p.setParser( pm_expression_p
! ## | ( multiplicative_expression_p >> one_of_p( '* / %' ) >> pm_expression_p) )
##
! ##additive_expression_p = proxy_p()
! ##additive_expression_p.setParser( multiplicative_expression_p
! ## | ( additive_expression_p >> one_of_p( '+ -' ) >> multiplicative_expression_p ) )
! ##
! ##shift_expression_p = proxy_p()
! ##shift_expression_p.setParser( additive_expression_p
! ## | ( shift_expression_p >> one_of_p( '>> <<' ) >> additive_expression_p ) )
! ##
! ##relational_expression_p = proxy_p()
! ##relational_expression_p.setParser( shift_expression_p
! ## | ( relational_expression_p >> one_of_p( '< > <= >=' ) >> shift_expression_p ) )
! ##
! ##equality_expression_p = proxy_p()
! ##equality_expression_p.setParser( relational_expression_p
! ## | ( equality_expression_p >> one_of_p( '== !=' ) >> relational_expression_p ) )
! def binary_expr_p_factory( simple_expr_parser, symbols ):
! p = proxy_p()
! return simple_expr_parser | ( p >> one_of_p( symbols ) >> simple_expr_parser )
!
! multiplicative_expression_p = binary_expr_p_factory( pm_expression_p, '* / %' )
! additive_expression_p = binary_expr_p_factory( multiplicative_expression_p, '+ -' )
! shift_expression_p = binary_expr_p_factory( additive_expression_p, '<< >>' )
! relational_expression_p = binary_expr_p_factory( shift_expression_p, '< > <= >=' )
! equality_expression_p = binary_expr_p_factory( relational_expression_p, '== !=' )
! and_expression_p = binary_expr_p_factory( equality_expression_p, '&' )
! exclusive_or_expression_p = binary_expr_p_factory( and_expression_p, '^' )
! inclusive_or_expression_p = binary_expr_p_factory( exclusive_or_expression_p, '|' )
! logical_and_expression_p = binary_expr_p_factory( inclusive_or_expression_p, '&&' )
! logical_or_expression_p = binary_expr_p_factory( logical_and_expression_p, '||' )
!
! conditional_expression_p = proxy_p()
! conditional_expression_p.setParser( logical_or_expression_p
! | ( conditional_expression_p >> '?' >> expression_p >> ':' >> assignment_expression_p ) )
!
! assignment_operator_p = one_of_p( '= *= /= %= += -= >>= <<= &= ^= |=' )
!
! assignment_expression_p.setParser( conditional_expression_p
! | (logical_or_expression_p >> assignment_operator_p >> assignment_expression_p)
! | throw_expression_p )
!
! expression_p.setParser( assignment_expression_p
! | (expression_p >> ',' >> assignment_expression_p ) )
!
! constant_expression_p.setParser( conditional_expression_p )
# ############################## A.6: Statements ############################
***************
*** 918,922 ****
exception_specification_p = proxy_p()
function_try_block_p = proxy_p()
- ptr_operator_p = proxy_p()
abstract_declarator_p = proxy_p()
direct_abstract_declarator_p = proxy_p()
--- 1079,1082 ----
***************
*** 985,989 ****
init_declarator_list_p = list_p( init_declarator_p, ',' )
! type_specifier_seq_p = repeat_p( 1, type_specifier_p )
# ############################## A.7: Declaration ############################
--- 1145,1149 ----
init_declarator_list_p = list_p( init_declarator_p, ',' )
! type_specifier_seq_p.setParser( repeat_p( 1, type_specifier_p ) )
# ############################## A.7: Declaration ############################
***************
*** 1047,1052 ****
# - opt(::) opt(nested-name-specifier) type-name
# - opt(::) opt(nested-name-specifier) opt(tempalte) template-id
! simple_type_specifier_p = symbol_p('char') | 'wchar_t' | 'bool' | 'short' | 'int' | 'long' \
! | 'signed' | 'unsigned' | 'float' | 'double' | 'void'
storage_class_specifier_p = symbol_p('auto') | 'register' | 'static' | 'extern' | 'mutable'
--- 1207,1211 ----
# - opt(::) opt(nested-name-specifier) type-name
# - opt(::) opt(nested-name-specifier) opt(tempalte) template-id
! simple_type_specifier_p.setParser( one_of_p( 'char wchar_t bool short int long signed unsigned float double void' ) )
storage_class_specifier_p = symbol_p('auto') | 'register' | 'static' | 'extern' | 'mutable'
***************
*** 1127,1130 ****
--- 1286,1295 ----
# A.8.2, C++PL3 p.810
+ conversion_declarator_p = repeat_p( 1, ptr_operator_p )
+
+ conversion_type_id_p = type_specifier_seq_p >> maybe_p( conversion_declarator_p )
+
+ conversion_function_id_p.setParser( symbol_p('operator') >> conversion_type_id_p )
+
mem_initializer_id = nested_id_p
***************
*** 1133,1136 ****
--- 1298,1308 ----
ctor_initializer_p.setParser( symbol_p( ':' ) >> list_p( mem_initializer_p, ',' ) )
+ # ############### A.8.2: Classes, OverLoading ##################
+ # A.8.3, C++PL3 p.810
+
+ operator_p = one_of_p( '+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , ->* -> () []') \
+ | ( one_of_p( 'new delete' ) >> maybe_p( '[]' ) )
+
+ operator_function_id_p.setParser( symbol_p('operator') >> operator_p )
***************
*** 1138,1142 ****
# A.10, C++PL3 p.812
! throw_expression_p = symbol_p('throw') >> maybe_p( assignment_expression_p )
exception_declaration_p = (type_specifier_seq_p >> maybe_p( declarator_p | abstract_declarator_p )) \
--- 1310,1314 ----
# A.10, C++PL3 p.812
! throw_expression_p.setParser( symbol_p('throw') >> maybe_p( assignment_expression_p ) )
exception_declaration_p = (type_specifier_seq_p >> maybe_p( declarator_p | abstract_declarator_p )) \
***************
*** 1161,1168 ****
--- 1333,1343 ----
access_level_spec_p.setName( 'access_level_spec_p' )
access_specifier_p.setName( 'access_specifier_p' )
+ additive_expression_p.setName( 'additive_expression_p' )
+ and_expression_p.setName( 'and_expression_p' )
array_type_p.setName( 'array_type_p' )
asm_definition_p.setName( 'asm_definition_p' )
asm_keyword_p.setName( 'asm_keyword_p' )
assignment_expression_p.setName( 'assignment_expression_p' )
+ assignment_operator_p.setName( 'assignment_operator_p' )
attribut_decl_p.setName( 'attribut_decl_p' )
attribut_modifiers_p.setName( 'attribut_modifiers_p' )
***************
*** 1172,1175 ****
--- 1347,1352 ----
block_declaration_p.setName( 'block_declaration_p' )
block_statement_p.setName( 'block_statement_p' )
+ cast_expression_p.setName( 'cast_expression_p' )
+ cast_keywords_p.setName( 'cast_keywords_p' )
class_body_statements_p.setName( 'class_body_statements_p' )
class_decl_p.setName( 'class_decl_p' )
***************
*** 1183,1188 ****
--- 1360,1369 ----
class_specifier_p.setName( 'class_specifier_p' )
compound_statement_p.setName( 'compound_statement_p' )
+ conditional_expression_p.setName( 'conditional_expression_p' )
constant_expression_p.setName( 'constant_expression_p' )
constant_initializer_p.setName( 'constant_initializer_p' )
+ conversion_declarator_p.setName( 'conversion_declarator_p' )
+ conversion_function_id_p.setName( 'conversion_function_id_p' )
+ conversion_type_id_p.setName( 'conversion_type_id_p' )
ctor_initializer_p.setName( 'ctor_initializer_p' )
cv_modifier_p.setName( 'cv_modifier_p' )
***************
*** 1194,1199 ****
--- 1375,1382 ----
declaration_seq_p.setName( 'declaration_seq_p' )
declarator_p.setName( 'declarator_p' )
+ delete_expression_p.setName( 'delete_expression_p' )
direct_abstract_declarator_p.setName( 'direct_abstract_declarator_p' )
direct_declarator_p.setName( 'direct_declarator_p' )
+ direct_new_declarator_p.setName( 'direct_new_declarator_p' )
elaborated_type_specifier_p.setName( 'elaborated_type_specifier_p' )
end_p.setName( 'end_p' )
***************
*** 1202,1208 ****
--- 1385,1394 ----
enumerator_p.setName( 'enumerator_p' )
eos_p.setName( 'eos_p' )
+ equality_expression_p.setName( 'equality_expression_p' )
exception_declaration_p.setName( 'exception_declaration_p' )
exception_specification_p.setName( 'exception_specification_p' )
+ exclusive_or_expression_p.setName( 'exclusive_or_expression_p' )
expression_list_p.setName( 'expression_list_p' )
+ expression_p.setName( 'expression_p' )
friend_decl_p.setName( 'friend_decl_p' )
function_body_p.setName( 'function_body_p' )
***************
*** 1214,1218 ****
--- 1400,1406 ----
handler_p.setName( 'handler_p' )
handler_seq_p.setName( 'handler_seq_p' )
+ id_expression_p.setName( 'id_expression_p' )
id_p.setName( 'id_p' )
+ inclusive_or_expression_p.setName( 'inclusive_or_expression_p' )
init_declarator_list_p.setName( 'init_declarator_list_p' )
init_declarator_p.setName( 'init_declarator_p' )
***************
*** 1220,1225 ****
--- 1408,1417 ----
initializer_list_p.setName( 'initializer_list_p' )
initializer_p.setName( 'initializer_p' )
+ instance_accessor_p.setName( 'instance_accessor_p' )
linkage_specification_begin_p.setName( 'linkage_specification_begin_p' )
linkage_specification_p.setName( 'linkage_specification_p' )
+ literal_expression_p.setName( 'literal_expression_p' )
+ logical_and_expression_p.setName( 'logical_and_expression_p' )
+ logical_or_expression_p.setName( 'logical_or_expression_p' )
mem_initializer_p.setName( 'mem_initializer_p' )
member_declaration_p.setName( 'member_declaration_p' )
***************
*** 1229,1232 ****
--- 1421,1425 ----
member_initializers_p.setName( 'member_initializers_p' )
member_specification_p.setName( 'member_specification_p' )
+ multiplicative_expression_p.setName( 'multiplicative_expression_p' )
named_namespace_definition_p.setName( 'named_namespace_definition_p' )
namespace_alias_definition_p.setName( 'namespace_alias_definition_p' )
***************
*** 1234,1245 ****
--- 1427,1452 ----
namespace_definition_p.setName( 'namespace_definition_p' )
nested_id_p.setName( 'nested_id_p' )
+ new_declarator_p.setName( 'new_declarator_p' )
+ new_expression_p.setName( 'new_expression_p' )
+ new_initializer_p.setName( 'new_initializer_p' )
+ new_placement_p.setName( 'new_placement_p' )
+ new_type_id_p.setName( 'new_type_id_p' )
null_statement_p.setName( 'null_statement_p' )
+ operator_function_id_p.setName( 'operator_function_id_p' )
+ operator_p.setName( 'operator_p' )
opt_parameter_decl_assign_p.setName( 'opt_parameter_decl_assign_p' )
optional_initializer_p.setName( 'optional_initializer_p' )
parameter_declaration_clause_p.setName( 'parameter_declaration_clause_p' )
parameter_declaration_p.setName( 'parameter_declaration_p' )
+ pm_expression_p.setName( 'pm_expression_p' )
+ postfix_expression_p.setName( 'postfix_expression_p' )
+ primary_expression_p.setName( 'primary_expression_p' )
+ pseudo_destructor_name_p.setName( 'pseudo_destructor_name_p' )
ptr_operator_p.setName( 'ptr_operator_p' )
pure_specifier_p.setName( 'pure_specifier_p' )
+ qualified_id_p.setName( 'qualified_id_p' )
qualified_namespace_specifier_p.setName( 'qualified_namespace_specifier_p' )
+ relational_expression_p.setName( 'relational_expression_p' )
+ shift_expression_p.setName( 'shift_expression_p' )
simple_declaration_p.setName( 'simple_declaration_p' )
simple_type_specifier_p.setName( 'simple_type_specifier_p' )
***************
*** 1250,1258 ****
--- 1457,1469 ----
try_block_p.setName( 'try_block_p' )
type_id_list_p.setName( 'type_id_list_p' )
+ type_id_p.setName( 'type_id_p' )
type_p.setName( 'type_p' )
type_specifier_p.setName( 'type_specifier_p' )
type_specifier_seq_p.setName( 'type_specifier_seq_p' )
type_suffix_p.setName( 'type_suffix_p' )
+ unary_expression_p.setName( 'unary_expression_p' )
+ unary_operator_p.setName( 'unary_operator_p' )
unnamed_namespace_definition_p.setName( 'unnamed_namespace_definition_p' )
+ unqualified_id_p.setName( 'unqualified_id_p' )
using_declaration_p.setName( 'using_declaration_p' )
using_directive_p.setName( 'using_directive_p' )
Index: parsertest.py
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/parsertest.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** parsertest.py 2 Aug 2003 21:29:08 -0000 1.5
--- parsertest.py 3 Aug 2003 08:50:30 -0000 1.6
***************
*** 63,67 ****
def testSymbol( self ):
! symbols = string.split( ':: << >> <= >= || && &= |= += -= /= *= ^= ' \
'( ) [ ] { } ~ / - + / * = ^ % < > & | ; , : ? ' \
'if else break continue for while do void int' )
--- 63,67 ----
def testSymbol( self ):
! symbols = string.split( ':: << >> <= >= || && &= |= += -= /= *= ^= %= >>= <<= ' \
'( ) [ ] { } ~ / - + / * = ^ % < > & | ; , : ? ' \
'if else break continue for while do void int' )
|