2013-04-21 3 views
1

나는 프로세스를 자동화하기 위해 사용자 정의 스크립트를 사용하고 있습니다. (실제로 배우기). 이것은 스크립트입니다.스크립트에서 선언되지 않은 변수 감지

var a = 5; 
var b = 55; 

return a+b; 

저는 소스를 C#으로 변환하고 CSharpCodeProvider 클래스로 컴파일하고 있습니다. 나는 현재 여기 토큰으로 변환하고 있어요 내 토큰 열거

public enum Tokens 
{ 
    RETURN, 
    NEWLINE, 
    WHITESPACE, 
    VAR, 
    WORD, 
    SYMBOL, 
    INTEGER 
} 

입니다 그리고

VAR, WHITESPACE, WORD, WHITESPACE, INTEGER, SYMBOL 
NEWLINE, 
VAR, WHITESPACE, WORD, WHITESPACE, INTEGER, SYMBOL 
NEWLINE 
NEWLINE 
RETURN, WHITESPACE, WORD, SYMBOL, WORD, SYMBOL 

내가 현재 선언되지 않은 변수를 찾아 그들에게 자신을 선언하기 위해 노력하고있어 이러한 토큰을 얻을 성공적으로하고 . 나는 모든 WORD을 변수 목록에 추가하고 스크립트에 추가하려고 시도했지만 중복 된 선언을 얻습니다.

나는 그것도

a = 5; 
var b = 55; 

return a+b; 

은 즉에만 var 키워드없이 일에 대한 선언을 추가 유효성을 검사 할.

이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

편집 : 나는 소스를 분석하고있어 어떻게

여기. 대신 목록으로하는 사전 (= 해시)으로 "결과"를 선언 할 수

List<Token> tokensList; 
List<string> variables; 

for (int i=0; i<tokensList.Count; i++) 
{ 
    Token token = tokensList[i]; 

    switch (token.TokenType) 
    { 
     case WORD: 
      variables.Add(token.Value); 
      break; 
    } 
    result.Append(token.Value); 
} 
+0

당신이 선언되지 않은 변수에 의해 무엇을 의미합니까? 스크립트의 모든 변수가 선언됩니다. – devdigital

+0

그런 경우조차 얻으려고 노력하십시오. –

+0

중복을 삭제하려면 distinct를 사용하십시오. – Vincenzo

답변

0

, 그것은 중복이 수없는 경우

.

또는 대체 :와

result.Append(token.Value); 

:

if (!result.Contains(token.Value)) 
     result.Append(token.Value); 
+0

예. 결과는 StringBuilder 객체입니다. 추가 할 var 키워드 뒤에 변수를 추가하고 싶지 않습니다. –

+0

안녕하세요, 문자열로 정의하면이 구문 (.Contains)은 동일하게 작동하며 중복되지 않습니다. – Wasafa1