From 4c9ef392757f2cee8e4b6edcb0576bdea812e43a Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Sun, 27 Jun 2010 16:49:46 -0500 Subject: [PATCH] Refresh cs2j parser from AntlrCSharp repository --- CSharpTranslator/antlr3/src/cs2j/CLR/cs2j.cs | 21 +- .../antlr3/src/cs2j/CSharp/PreProcessor.cs | 42 ++-- CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g | 181 ++++++++---------- CSharpTranslator/antlr3/src/cs2j/README.txt | 28 ++- 4 files changed, 119 insertions(+), 153 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CLR/cs2j.cs b/CSharpTranslator/antlr3/src/cs2j/CLR/cs2j.cs index f389d13..d683ba1 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CLR/cs2j.cs +++ b/CSharpTranslator/antlr3/src/cs2j/CLR/cs2j.cs @@ -231,7 +231,7 @@ namespace RusticiSoftware.Translator.CSharp w.Close(); } } - // keving: comment out for now doFile(new FileInfo(args[i]), ".cs", translateFile, exclude); // parse it + // keving: comment out for now doFile(new FileInfo(args[i]), ".cs", translateFile, exclude); // parse it if (enumXmlWriter != null) { enumXmlWriter.WriteEndElement(); @@ -358,17 +358,18 @@ namespace RusticiSoftware.Translator.CSharp /// private static void DumpNodes(CommonTreeNodeStream nodes) { - // Dump out nodes if -n on command line - // if (Util.Args.IsFlagSet("-n")) - // { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Nodes"); int spaces = 0; string str_spaces = " "; object o_prev = string.Empty; - for (int n = 0; n < nodes.Count; ++n) + //for (int n = 0; n < nodes.Count; ++n) + object o = nodes.NextElement(); + while (!nodes.IsEndOfFile(o)) { - object o = nodes.Get(n); + //object o = nodes.Get(n); + //object o = nodes[n]; + if (o.ToString() == "DOWN") { spaces += 2; @@ -385,13 +386,13 @@ namespace RusticiSoftware.Translator.CSharp Console.Write(" {0}", o_prev.ToString()); o_prev = o; + o = nodes.NextElement(); } if (o_prev.ToString() != "UP" && o_prev.ToString() != "DOWN") Console.WriteLine(" {0}", o_prev.ToString()); Console.ResetColor(); - //} } - + // Here's where we do the real work... public static void addNetTranslation(string fullName, Stream s) { @@ -406,8 +407,8 @@ namespace RusticiSoftware.Translator.CSharp if (t != null) { // A prescan of all files to build an environment mapping qualified name to typereptemplate - // CSharpEnvBuilder envBuilder = new CSharpEnvBuilder(); - // envBuilder.compilationUnit(t, null, appEnv); + // CSharpEnvBuilder envBuilder = new CSharpEnvBuilder(); + // envBuilder.compilationUnit(t, null, appEnv); } } diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/PreProcessor.cs b/CSharpTranslator/antlr3/src/cs2j/CSharp/PreProcessor.cs index 3ec54ea..d24e2f7 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/PreProcessor.cs +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/PreProcessor.cs @@ -1,15 +1,15 @@ // PreProcessor.cs // +// Andrew Bradnan 2009-2010 +// andrew.bradnan@gmail.com using System; -using System.Collections; using System.Collections.Generic; using System.Text; using Antlr.Runtime; using System.Diagnostics; -using Debug = System.Diagnostics.Debug; -namespace RusticiSoftware.Translator.CSharp +namespace Browse { /// PreProcessor /// The lexer preprocesses the CSharp code. @@ -25,33 +25,14 @@ namespace RusticiSoftware.Translator.CSharp Processing.Push(true); // Grab what's defined from the command line - //string[] args = Environment.GetCommandLineArgs(); - //for(int n = 0; n < args.Length; ++n) - //{ - // if (args[n] == "-D") - // if ((n + 1) < args.Length) - // MacroDefines.Add(args[n + 1], string.Empty); - //} + string[] args = Environment.GetCommandLineArgs(); + for(int n = 0; n < args.Length; ++n) + { + if (args[n] == "-D") + if ((n + 1) < args.Length) + MacroDefines.Add(args[n + 1], string.Empty); + } } - - public PreProcessor(ICharStream input) - { - // By default we are preprocessing input - Processing.Push(true); - - base.CharStream = input; - - } - - /// - /// Add a macro variable to the environment - /// - /// Name of macro to define - public void AddDefine(string define) - { - MacroDefines.Add(define, string.Empty); - } - public override void mTokens() { base.mTokens(); @@ -99,7 +80,8 @@ namespace RusticiSoftware.Translator.CSharp /// public override String GetErrorMessage(RecognitionException e, String[] tokenNames) { - IList stack = GetRuleInvocationStack(e, this.GetType().Name); + IList stack = GetRuleInvocationStack(e, this.GetType().Name); + String msg = null; StringBuilder sb = new StringBuilder(); sb.Append("\r\n"); foreach (object o in stack) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g index 6a8d319..7f4c725 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g @@ -8,47 +8,56 @@ grammar cs; - options { backtrack=true; memoize=true; output=AST; language=CSharp2; } - + tokens { + ARGUMENTS; ASSIGNMENT; BLOCK; CAST_EXPRESSION; CLASS_DECL; + CLASS_INHERITANCE; DELEGATE_DECL; ELSE; + EMPTY_BODY; ENUM_DECL; EXPRESSION; FIELD_DECL; + FIXED_PARAMETER; + ID; IF; INTERFACE_DECL; INVOCATION_EXPRESSION; + LOCAL_VAR; LOCAL_VARIABLE_DECLARATOR; MEMBER_ACCESS; METHOD_DECL; NAMESPACE_DECL; NAMESPACE_OR_TYPE_NAME; + NON_ASSIGNMENT_EXPRESSION; + NSTN; PREDEFINED_TYPE; + PRIMARY; PROPERTY_DECLARATION; QID_PART; - RETURN_TYPE; + TYPE; + TYPE_NAME; UNARY_EXPRESSION; USING_DIRECTIVE; - + VARIABLE_DECLARATOR; + TELEMENT; TMEMBER; - TINVOCATION; + TINVOCATION; } - + @lexer::header { - using System.Collections.Generic; using System.Diagnostics; using Debug = System.Diagnostics.Debug; } @@ -66,10 +75,7 @@ tokens @header { - using System.Collections.Generic; using System.Text; - - } /******************************************************************************************** @@ -81,27 +87,11 @@ compilation_unit: // extern_alias_directives? using_directives? global_attributes? - namespace_declaration? - namespace_body + namespace_body? // specific namespace or in the global namespace ; namespace_declaration: 'namespace' qualified_identifier namespace_block ';'? -> ^(NAMESPACE_DECL 'namespace' qualified_identifier namespace_block ';'?) ; -qualified_identifier: - identifier ('.' identifier)* ; - -qid: // qualified_identifier v2 - qid_start qid_part* ; -qid_start: - identifier ('::' identifier)? generic_argument_list? - | 'this' - | 'base' - | predefined_type - | literal ; // 0.ToString() is legal -qid_part: - access_operator identifier generic_argument_list? - -> ^(QID_PART access_operator identifier generic_argument_list?) ; - namespace_block: '{' namespace_body '}' ; namespace_body: @@ -134,14 +124,31 @@ type_declaration: qualified_alias_member: identifier '::' identifier generic_argument_list? ; +// Identifiers +qualified_identifier: + identifier ('.' identifier)* ; + +qid: // qualified_identifier v2 + qid_start qid_part* ; +qid_start: + identifier ('::' identifier)? generic_argument_list? + | 'this' + | 'base' + | predefined_type + | literal ; // 0.ToString() is legal +qid_part: + access_operator identifier generic_argument_list? + -> ^(QID_PART access_operator identifier generic_argument_list?) ; + + // B.2.1 Basic Concepts namespace_name : namespace_or_type_name ; type_name: - namespace_or_type_name ; + namespace_or_type_name -> ^(TYPE_NAME namespace_or_type_name) ; namespace_or_type_name: - id1 = identifier ga1 = generic_argument_list? ('::' id2 = identifier ga2 = generic_argument_list?)? ('.' id3 = identifier ga3 = generic_argument_list?)* - -> ^(NAMESPACE_OR_TYPE_NAME $id1 $ga1? ('::' $id2 $ga2?)? ('.' $id3 $ga3?)* ) + id1 = identifier ga1 = generic_argument_list? ('::' id2 = identifier ga2 = generic_argument_list?)? ('.' id3 += identifier ga3 += generic_argument_list?)* + -> ^(NAMESPACE_OR_TYPE_NAME ^(NSTN $id1 $ga1?) ^(NSTN '::' $id2 $ga2?)? ^(NSTN $id3 $ga3?)*) // | qualified_alias_member (the :: part) ; @@ -190,14 +197,15 @@ attribute_argument_expression: /* I'm going to ignore the mostly semantic bnf in the C Sharp spec and just do syntax */ type: - (type_name | predefined_type) rank_specifiers '*'* - | type_name '*'+ - | type_name '?' - | type_name - | predefined_type '*'+ - | predefined_type '?' - | predefined_type - | 'void' '*'+ ; + (type_name | predefined_type) rank_specifiers '*'* -> + ^(TYPE type_name? predefined_type? rank_specifiers '*'*) + | type_name '*'+ -> ^(TYPE type_name '*'+) + | type_name '?' -> ^(TYPE type_name '?') + | type_name -> ^(TYPE type_name) + | predefined_type '*'+ -> ^(TYPE predefined_type '*'+) + | predefined_type '?' -> ^(TYPE predefined_type '?') + | predefined_type -> ^(TYPE predefined_type) + | 'void' '*'+ -> ^(TYPE 'void' '*'+) ; non_nullable_type: (type_name | predefined_type) rank_specifiers '*'* | type_name '*'+ @@ -240,6 +248,13 @@ type_variable_name: expression: non_assignment_expression -> ^(EXPRESSION non_assignment_expression) | assignment -> ^(EXPRESSION assignment); +non_assignment_expression: + conditional_expression + | lambda_expression + | query_expression ; +assignment: + unary_expression assignment_operator expression + -> ^(ASSIGNMENT unary_expression assignment_operator expression) ; unary_expression: cast_expression // primary_expression... has parenthesized_expression | '+' unary_expression @@ -252,6 +267,8 @@ unary_expression: | primary_or_array_creation_expression '++'? '--'? -> ^(UNARY_EXPRESSION primary_or_array_creation_expression '++'? '--'?) | pointer_indirection_expression | addressof_expression ; +assignment_operator: + '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>' '>=' ; pre_increment_expression: '++' unary_expression ; pre_decrement_expression: @@ -260,13 +277,6 @@ pointer_indirection_expression: '*' unary_expression ; addressof_expression: '&' unary_expression ; -non_assignment_expression: - conditional_expression - | lambda_expression - | query_expression; -assignment: - unary_expression assignment_operator expression - -> ^(ASSIGNMENT unary_expression assignment_operator expression) ; variable_reference: expression ; @@ -293,31 +303,8 @@ primary_or_array_creation_expression: primary_expression | array_creation_expression ; -texpr: - tmember ; - -//tinvocation: -// te1=telement arguments? (access_operator te2=telement arguments?)*; - -tinvocation: - tmember tinvocation_part? ; -tinvocation_part: - arguments+ (access_operator! tinvocation) - | arguments+ telement_part - | arguments+ ; - -telement: - tmember telement_part? ; -telement_part: - bracket_expression+ (access_operator telement) -> ^(TELEMENT bracket_expression+ telement) - | bracket_expression+ tinvocation_part -> ^(TELEMENT bracket_expression+ tinvocation_part) - | bracket_expression+ -> ^(TELEMENT bracket_expression) ; - -tmember: - identifier (access_operator identifier)* -> ^(TMEMBER identifier+) ; - primary_expression: - primary_expression_start primary_expression_part* + primary_expression_start primary_expression_part* -> ^(PRIMARY primary_expression_start primary_expression_part*) | delegate_creation_expression // new FooDelegate (int X, string Y) | anonymous_object_creation_expression // new {int X, string Y} | sizeof_expression // sizeof (struct) @@ -358,7 +345,7 @@ brackets_or_arguments: access_operator: '.' | '->' ; arguments: - '(' argument_list? ')' ; + '(' argument_list? ')' -> ^(ARGUMENTS argument_list*) ; bracket_expression: '[' expression_list? ']' ; @@ -552,8 +539,6 @@ array_initializer: variable_initializer_list: variable_initializer (',' variable_initializer)* ; // >>= check needed (no whitespace) -assignment_operator: - '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>' '>=' ; lambda_expression: anonymous_function_signature '=>' anonymous_function_body; anonymous_function_signature: @@ -632,8 +617,8 @@ class_modifiers: class_modifier: 'new' | 'public' | 'protected' | 'internal' | 'private' | 'abstract' | 'sealed' | 'static' | 'unsafe'; class_base: - ':' class_type (',' interface_type_list)? - | ':' interface_type_list ; + ':' class_type (',' interface_type_list)? -> ^(CLASS_INHERITANCE class_type interface_type_list?) + | ':' interface_type_list -> ^(CLASS_INHERITANCE interface_type_list) ; interface_type_list: t += type_name (',' t += type_name)* -> $t+; @@ -684,6 +669,11 @@ constant_modifiers: constant_modifier+ ; constant_modifier: 'new' | 'public' | 'protected' | 'internal' | 'private' ; +constant_declarators: + constant_declarator (',' constant_declarator)* ; +constant_declarator: + identifier ('=' constant_expression)? ; + field_declaration: attributes? field_modifiers? type variable_declarators ';' -> ^(FIELD_DECL attributes? field_modifiers? type variable_declarators) @@ -693,10 +683,10 @@ field_modifiers: field_modifier: 'new' | 'public' | 'protected' | 'internal' | 'private' | 'static' | 'readonly' | 'volatile' | 'unsafe' ; variable_declarators: - variable_declarator (',' variable_declarator)* ; + vd += variable_declarator (',' vd += variable_declarator)* -> $vd+; variable_declarator: // identifier ('=' variable_initializer)? ; - type_name ('=' variable_initializer)? ; // eg. event EventHandler IInterface.VariableName; + type_name ('=' variable_initializer)? -> ^(VARIABLE_DECLARATOR type_name ('=' variable_initializer)?) ; // eg. event EventHandler IInterface.VariableName; variable_initializer: expression | array_initializer ; // | literal ; @@ -704,9 +694,9 @@ method_declarations: method_declaration+ ; method_declaration: method_header method_body - -> ^(METHOD_DECL method_header method_body); -method_header: - attributes? method_modifiers? 'partial'? return_type (member_name | 'get' | 'set') generic_parameter_list? + -> ^(METHOD_DECL method_header method_body?); +method_header: + attributes? method_modifiers? 'partial'? return_type member_name generic_parameter_list? '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ; method_modifiers: method_modifier+ ; @@ -714,27 +704,30 @@ method_modifier: 'new' | 'public' | 'protected' | 'internal' | 'private' | 'static' | 'virtual' | 'sealed' | 'override' | 'abstract' | 'extern' | 'unsafe' ; return_type: - type -> ^(RETURN_TYPE type) - | 'void' '*'* -> ^(RETURN_TYPE 'void' '*'*); + type + | 'void' '*'* -> ^(TYPE ^(PREDEFINED_TYPE 'void' '*'*)); method_body: block ; formal_parameter_list: fp += formal_parameter (',' fp += formal_parameter)* -> $fp+ ; formal_parameter: - fixed_parameter | parameter_array | '__arglist'; // __arglist is undocumented, see google + fixed_parameter + | parameter_array + | '__arglist'; // __arglist is undocumented, see google fixed_parameters: fixed_parameter+ ; // 4.0 fixed_parameter: - attributes? parameter_modifier? type identifier default_argument?; + attributes? parameter_modifier? type identifier default_argument? + -> ^(FIXED_PARAMETER attributes? parameter_modifier? type identifier default_argument?) ; // 4.0 default_argument: '=' expression; parameter_modifier: 'ref' | 'out' | 'this' ; parameter_array: - attributes? 'params'? array_type identifier ; + attributes? 'params' type identifier ; property_declaration: attributes? property_modifiers? type member_name '{' accessor_declarations '}' -> ^(PROPERTY_DECLARATION attributes? property_modifiers? type member_name '{' accessor_declarations '}') ; @@ -952,7 +945,7 @@ fixed_pointer_initializer: unsafe_statement: 'unsafe' block; block: - ';' -> ^(BLOCK) + ';' -> | '{' statement_list? '}' -> ^(BLOCK statement_list?); statement_list: statement+ ; @@ -964,7 +957,8 @@ declaration_statement: (local_variable_declaration | local_constant_declaration) ';' ; local_variable_declaration: - local_variable_type local_variable_declarators ; + local_variable_type local_variable_declarators -> + ^(LOCAL_VAR local_variable_type local_variable_declarators); local_variable_type: type | 'var' @@ -982,11 +976,6 @@ stackalloc_initializer: 'stackalloc' unmanaged_type '[' expression ']' ; local_constant_declaration: 'const' type constant_declarators ; -constant_declarators: - constant_declarator (',' constant_declarator)* ; -constant_declarator: - identifier ('=' constant_expression)? ; -// identifier ('=' literal)? ; expression_statement: expression ';' ; statement_expression: @@ -1086,8 +1075,8 @@ yield_statement: | ('yield' 'break' ';') ; identifier: - IDENTIFIER - | also_keyword ; + IDENTIFIER -> ^(ID IDENTIFIER) + | also_keyword -> ^(ID also_keyword); literal: Real_literal @@ -1106,10 +1095,10 @@ keyword: also_keyword: 'add' | 'alias' | 'assembly' | 'module' | 'field' | 'event' | 'method' | 'param' | 'property' | 'type' - | 'yield' | 'from' | 'into' | 'join' | 'on' | 'where' | 'orderby' | 'group' | 'by' | 'ascending' | 'descending' - | 'equals' | 'select' | 'pragma' | 'let' | 'remove' | 'set' | 'var' | '__arglist'; + | 'yield' | 'from' | 'into' | 'join' | 'on' | 'where' | 'orderby' | 'group' | 'by' | 'ascending' + | 'descending' | 'equals' | 'select' | 'pragma' | 'let' | 'remove' | 'set' | 'var' | '__arglist' | 'dynamic'; /////////////////////////////////////////////////////// -// Lexer Section +// Lexar Section /////////////////////////////////////////////////////// TRUE : 'true'; diff --git a/CSharpTranslator/antlr3/src/cs2j/README.txt b/CSharpTranslator/antlr3/src/cs2j/README.txt index 35c8150..c3ab13c 100644 --- a/CSharpTranslator/antlr3/src/cs2j/README.txt +++ b/CSharpTranslator/antlr3/src/cs2j/README.txt @@ -1,21 +1,15 @@ - -- Rebuild cs parser +cd "C:\Documents and Settings\developer\My Documents\gitrepos\cs2j\CSharpTranslator\antlr3\src\cs2j\CSharp" +java -Xmx512m -jar ..\..\..\jar\antlr-3.3.jar cs.g -cd My\ Documents/gitrepos/cs2j/CSharpTranslator/antlr3 - -java -Xmx512m -jar jar\antlr-3.2.jar src\cs2j\CSharp\cs.g -java -Xmx512m -jar jar\antlr-3.2.jar -debug src\cs2j\CSharp\cs.g - --- From git bash -java -Xmx512m -jar jar/antlr-3.2.jar -fo src/cs2j/CSharp src/cs2j/CSharp/cs.g - -src\cs2j\bin\Debug\cs2j.exe -netdir "c:\Documents and Settings\DevUser\My Documents\TrunkBranch\CS2JLibrary" -appdir "c:\Documents and Settings\DevUser\My Documents\Visual Studio 2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core" "c:\Documents and Settings\DevUser\My Documents\Visual Studio 2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core\Logic" - -C:\Documents and Settings\DevUser\My Documents\gitrepos\CSharpTranslator>src\cs2 -j\bin\Debug\cs2j.exe -netdir "c:\Documents and Settings\DevUser\My Documents\Tru -nkBranch\CS2JLibrary" -appdir "c:\Documents and Settings\DevUser\My Documents\Vi -sual Studio 2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core\Util\Cach -ing\NullCache.cs" "c:\Documents and Settings\DevUser\My Documents\Visual Studio -2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core\Logic" +-- parse one file src\cs2j\bin\Debug\cs2j.exe -mindriver C:\Documents and Settings\DevUser\My Documents\kgtemp\getClass.cs + +-- parse Logic + +cd "C:\Documents and Settings\developer\My Documents\gitrepos\cs2j\CSharpTranslator\antlr3" + +src\cs2j\bin\Debug\cs2j.exe -netdir "c:\Documents and Settings\s\developer\My Documents\gitrepos\cs2j\CS2JLibrary\NetTranslations" -appdir "c:\Documents and Settings\developer\My Documents\Visual Studio 2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core" "c:\Documents and Settings\developer\My Documents\Visual Studio 2005\Projects\ScormEngineNetTrunk\src\app\ScormEngine.Core\Logic" + +