From b62e86c40142889b9ef104bea5124da04310daa3 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Thu, 28 Oct 2010 11:40:09 +0200 Subject: [PATCH] Wrap qualified identifier in a sub-tree By wrapping in a subtree we can use qualified_identifier.text to extract all the input that was matched by that rule, otherwise 'text' only matches the first node in a list. Took me ages to find that :( Send comments to hidden channel, hiopefully we can then retrieve them later. --- .../src/cs2j/CSharp/TemplateExtracter.g | 21 +++++++++++++------ CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g | 13 ++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g index f469a24..a5bd614 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g @@ -13,6 +13,7 @@ options { ASTLabelType=CommonTree; language=CSharp2; superClass='RusticiSoftware.Translator.CSharp.CommonWalker'; + output=AST; //backtrack=true; } @@ -57,7 +58,7 @@ scope UseScope; ; namespace_declaration: - 'namespace' qualified_identifier namespace_block ';'? ; + 'namespace' qi=qualified_identifier { Debug($qi.text); } namespace_block ';'? ; namespace_block: '{' namespace_body '}' ; namespace_body: @@ -114,7 +115,7 @@ namespace_or_type_name: type_or_generic ('::' type_or_generic)? ('.' type_or_generic)* ; type_or_generic: (identifier '<') => identifier generic_argument_list - | identifier + | identifier ; generic_argument_list: @@ -129,8 +130,10 @@ type: | 'void' '*'+ ; -qualified_identifier: - identifier ('.' identifier)* ; +qualified_identifier +@after{ Console.WriteLine("qualified_identifier(): " + $qualified_identifier.text); } +: + ^(QID identifier+) ; namespace_name : namespace_or_type_name ; @@ -162,6 +165,12 @@ predefined_type: 'bool' | 'byte' | 'char' | 'decimal' | 'double' | 'float' | 'int' | 'long' | 'object' | 'sbyte' | 'short' | 'string' | 'uint' | 'ulong' | 'ushort' ; -identifier: - IDENTIFIER { Debug($IDENTIFIER.Text); } ; +identifier +@after{ Console.WriteLine("identifier(): " + $identifier.text); } +: + IDENTIFIER + | 'add' | 'alias' | 'assembly' | 'module' | 'field' | 'method' | 'param' | 'property' | 'type' + | 'yield' | 'from' | 'into' | 'join' | 'on' | 'where' | 'orderby' | 'group' | 'by' | 'ascending' | 'descending' | 'equals' | 'select' | 'pragma' | 'let' | 'remove' | 'set' | 'var' | '__arglist' | 'dynamic' + ; + diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g index b867b64..cc4b902 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g @@ -8,7 +8,7 @@ options { tokens { - BLOCK; + QID; } @namespace { RusticiSoftware.Translator.CSharp } @@ -43,7 +43,7 @@ compilation_unit: namespace_declaration: 'namespace' qualified_identifier namespace_block ';'? ; namespace_block: - '{' namespace_body[false] '}' -> ^(BLOCK namespace_body) ; + '{' namespace_body[false] '}' ; namespace_body[bool bGlobal]: extern_alias_directives? using_directives? global_attributes? namespace_member_declarations? ; extern_alias_directives: @@ -75,7 +75,8 @@ type_declaration: | delegate_declaration ; // Identifiers qualified_identifier: - identifier ('.' identifier)* ; + i+=identifier ('.' i+=identifier)* + -> ^(QID $i+) ; namespace_name : namespace_or_type_name ; @@ -1084,15 +1085,15 @@ TS: { Skip(); } ; DOC_LINE_COMMENT : ('///' ~('\n'|'\r')* ('\r' | '\n')+) - { Skip(); } ; + {$channel=Hidden;} ; LINE_COMMENT : ('//' ~('\n'|'\r')* ('\r' | '\n')+) - { Skip(); } ; + {$channel=Hidden;} ; COMMENT: '/*' (options {greedy=false;} : . )* '*/' - { Skip(); } ; + {$channel=Hidden;} ; STRINGLITERAL : '"' (EscapeSequence | ~('"' | '\\'))* '"' ;