올바른 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; }
;
이 파서가 제대로 (너무 중첩 클래스) 빈 클래스를 계산 빈 클래스 몸 : I가 비어 있지 몸 클래스를 계산해야하는
internal class DeclarationClass1
{
class DeclarationClass2
{
public class DeclarationClass3
{
abstract class DeclarationClass4
{
}
}
}
}
같은 나는 다음과 같은 문법을 썼다 다음과 같이 :
class TestClass
{
int a = 42;
class Nested { }
}
"클래스 선언이 아님"모든 코드를 무시해야합니다. 위 예의 경우 무시하십시오.
int a = 42;
어떻게하면됩니까? 다른 언어의 예가 될 수 있습니까?
제발, 도와주세요!
부분 수업도주의하십시오. 부분 클래스는 한 파일에서 여러 번, 한 파일에서 한 번만 또는 여러 파일에 걸쳐 여러 번 나타날 수 있습니다. Assembly.GetTypes()는 옵션이 아닙니다. –
감사합니다. 부분 수업에 대해서 기억합니다. Assembly.GetTypes()는 저에게 적합하지 않습니다. 소스 레벨에서 이것을 처리해야합니다. –