3
我需要計算正確的C#源文件中的類的數量。 我寫了下面的語法:計算班級計數的部分語法
grammar CSharpClassGrammar;
options
{
language=CSharp2;
}
@parser::namespace { CSharpClassGrammar.Generated }
@lexer::namespace { CSharpClassGrammar.Generated }
@header
{
using System;
using System.Collections.Generic;
}
@members
{
private List<string> _classCollector = new List<string>();
public List<string> ClassCollector { get { return
_classCollector; } }
}
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
csfile : class_declaration* EOF
;
class_declaration
: (ACCESSLEVEL | MODIFIERS)* PARTIAL? 'class' CLASSNAME
class_body
';'?
{ _classCollector.Add($CLASSNAME.text); }
;
class_body
: '{' class_declaration* '}'
;
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
ACCESSLEVEL
: 'public' | 'internal' | 'protected' | 'private' | 'protected
internal'
;
MODIFIERS
: 'static' | 'sealed' | 'abstract'
;
PARTIAL
: 'partial'
;
CLASSNAME
: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
COMMENT
: '//' ~('\n'|'\r')* {$channel=HIDDEN;}
| '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
;
WHITESPACE
: ('\t' | ' ' | '\r' | '\n'| '\u000C')+ { $channel = HIDDEN; }
;
這個解析器正確計算空類(和嵌套類太)空類體:
internal class DeclarationClass1
{
class DeclarationClass2
{
public class DeclarationClass3
{
abstract class DeclarationClass4
{
}
}
}
}
我需要計算與非空體類,例如作爲:
class TestClass
{
int a = 42;
class Nested { }
}
我需要以某種方式忽略所有「不是類聲明」的代碼。 在上例中忽略
int a = 42;
我該怎麼做?可能是其他語言的例子嗎?
請幫忙!
請注意部分班級;請注意,部分類可以在一個文件中多次,一次只在一個文件中,或者分散在多個文件中。 Assembly.GetTypes()不是一個選項嗎? – 2011-02-06 15:11:10
謝謝,我記得部分課程。 Assembly.GetTypes()不適合我,我需要在源代碼級別處理這個。 – 2011-02-06 15:14:08