1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

method headers, elide virtual and override keywords

This commit is contained in:
Kevin Glynn 2010-12-06 10:18:23 +01:00
parent cdecbce4c0
commit 4b761a4410
5 changed files with 57 additions and 19 deletions

View File

@ -177,7 +177,7 @@ modifiers:
modifier+ ; modifier+ ;
modifier: modifier:
'new' | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static' 'new' | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static'
| 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' | 'override'; | 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' -> | 'override' -> /* not in Java,maybe convert to override annotation */;
class_member_declaration: class_member_declaration:
a=attributes? a=attributes?
@ -734,10 +734,16 @@ variable_declarator:
method_declaration: method_declaration:
method_header method_body ; method_header method_body ;
method_header: method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; member_name type_parameter_list? '(' formal_parameter_list? ')' type_parameter_constraints_clauses?
-> ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?);
method_body: method_body:
block ; block ;
member_name returns [string name, List<String> tyargs]: member_name :
type_or_generic ('.' type_or_generic)*
// keving [interface_type.identifier] | type_name '.' identifier
;
member_name_orig returns [string name, List<String> tyargs]:
qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface<int>.Method logic added. qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface<int>.Method logic added.
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
@ -876,7 +882,7 @@ return_type:
type type
| v='void' -> ^(TYPE[$v.token, "TYPE"] $v); | v='void' -> ^(TYPE[$v.token, "TYPE"] $v);
formal_parameter_list: formal_parameter_list:
formal_parameter (',' formal_parameter)* ; formal_parameter (',' formal_parameter)* -> ^(PARAMS formal_parameter+);
formal_parameter: formal_parameter:
attributes? (fixed_parameter | parameter_array) attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google | '__arglist'; // __arglist is undocumented, see google

View File

@ -144,7 +144,7 @@ modifier
class_member_declaration: class_member_declaration:
^(CONST attributes? modifiers? type constant_declarators) ^(CONST attributes? modifiers? type constant_declarators)
| ^(EVENT attributes? modifiers? event_declaration) | ^(EVENT attributes? modifiers? event_declaration)
| ^(METHOD attributes? modifiers? type method_declaration) | ^(METHOD attributes? modifiers? type method_declaration) -> method(modifiers={$modifiers.st}, type={$type.st}, method={$method_declaration.st})
| ^(INTERFACE attributes? modifiers? interface_declaration[$modifiers.st]) | ^(INTERFACE attributes? modifiers? interface_declaration[$modifiers.st])
| ^(CLASS attributes? modifiers? class_declaration[$modifiers.st]) | ^(CLASS attributes? modifiers? class_declaration[$modifiers.st])
| ^(PROPERTY attributes? modifiers? type property_declaration) | ^(PROPERTY attributes? modifiers? type property_declaration)
@ -421,12 +421,12 @@ qid: // qualified_identifier v2
| qid_start -> { $qid_start.st } | qid_start -> { $qid_start.st }
; ;
qid_start: qid_start:
predefined_type predefined_type -> { $predefined_type.st }
| (identifier generic_argument_list) => identifier generic_argument_list | (identifier generic_argument_list) => identifier generic_argument_list -> template(id={ $identifier.st }, args={ $generic_argument_list.st }) "<id><args>"
// | 'this' // | 'this'
// | 'base' // | 'base'
| identifier ('::' identifier)? | i1=identifier ('::' i2=identifier)? -> identifier(id={ $i1.st }, id2={ $i2.st })
| literal | literal -> { $literal.st }
; // 0.ToString() is legal ; // 0.ToString() is legal
@ -715,13 +715,19 @@ variable_declarator:
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
method_declaration: method_declaration:
method_header method_body ; method_header method_body -> method_declaration(header={$method_header.st}, body={$method_body.st}) ;
method_header: method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list[$type_parameter_constraints_clauses.tpConstraints]? formal_parameter_list?)
-> method_header(name={ $member_name.st }, typeparams = { $type_parameter_constraints_clauses.st }, params={ $formal_parameter_list.st });
method_body: method_body:
block ; block -> { $block.st };
member_name: member_name:
qid ; // IInterface<int>.Method logic added. t+=type_or_generic ('.' t+=type_or_generic)* -> template(items = { $t }) "<items; separator=\".\">"
;
// keving: missing interface_type.identifier
// identifier -> { $identifier.st }; // IInterface<int>.Method logic added.
//member_name:
// qid -> { $qid.st }; // IInterface<int>.Method logic added.
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
property_declaration: property_declaration:
@ -811,7 +817,7 @@ type_variable_name:
return_type: return_type:
type -> { $type.st } ; type -> { $type.st } ;
formal_parameter_list: formal_parameter_list:
formal_parameter (',' formal_parameter)* ; ^(PARAMS formal_parameter+) ;
formal_parameter: formal_parameter:
attributes? (fixed_parameter | parameter_array) attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google | '__arglist'; // __arglist is undocumented, see google

View File

@ -597,11 +597,14 @@ variable_declarator:
method_declaration: method_declaration:
method_header method_body ; method_header method_body ;
method_header: method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?);
method_body: method_body:
block ; block ;
member_name: member_name:
qid ; // IInterface<int>.Method logic added. type_or_generic ('.' type_or_generic)*
;
// keving: missing interface_type.identifier
//identifier ; // IInterface<int>.Method logic added.
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
property_declaration: property_declaration:
@ -682,7 +685,7 @@ constructor_constraint:
return_type: return_type:
type ; type ;
formal_parameter_list: formal_parameter_list:
formal_parameter (',' formal_parameter)* ; ^(PARAMS formal_parameter+) ;
formal_parameter: formal_parameter:
attributes? (fixed_parameter | parameter_array) attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google | '__arglist'; // __arglist is undocumented, see google

View File

@ -27,6 +27,8 @@ tokens {
CONVERSION_OPERATOR; CONVERSION_OPERATOR;
CONSTRUCTOR; CONSTRUCTOR;
DESTRUCTOR; DESTRUCTOR;
METHOD_HEADER;
PARAMS;
MONOPLUS; MONOPLUS;
MONOMINUS; MONOMINUS;

View File

@ -53,7 +53,26 @@ class_member(comments, member) ::= <<
<member> <member>
>> >>
field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field><if(init)> = <init><endif>;" method(modifiers, type, field, comments) ::= "<comments><modifiers(modifiers)><type> <method>"
method_header(name, typeparams, params, exception="Throwable") ::= <<
<name><typeparams>(<params; separator=", ">) throws <exception>
>>
method_declaration(header, body) ::= <<
<header><if(body)> {<else>;<endif>
<body>
<if(body)>}<endif>
>>
method_body(body) ::= <<
{
<body>
}
>>
field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field>;"
variable_declarators(varinits) ::= "<varinits; separator=\", \">" variable_declarators(varinits) ::= "<varinits; separator=\", \">"
variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>" variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>"
@ -61,6 +80,8 @@ primary_expression_start_parts(start,follows) ::= "<start><follows>"
type_param_constraint(param, constraints) ::= "<param> extends <constraints; separator=\" & \">" type_param_constraint(param, constraints) ::= "<param> extends <constraints; separator=\" & \">"
identifier(id, id2) ::= "<id><if(id2)>::<id2><endif>"
// ******* ENUMS *********** // ******* ENUMS ***********
enum(modifiers,comments, attributes, name, body) ::= << enum(modifiers,comments, attributes, name, body) ::= <<
@ -95,4 +116,4 @@ string(payload) ::= "<payload>"
verbatim_string(payload) ::= << verbatim_string(payload) ::= <<
"<payload; separator="\" + \n\"">" "<payload; separator="\" + \n\"">"
>> >>