2011-03-30 4 views
0

안녕하세요. 내 필요에 맞는 StreamTokenizer을 내 건물에 내고 있습니다. Java의 StreamTokenizer과 마찬가지로 nextToken() 메서드를 사용하여 발견 된 데이터 유형을 나타내는 정수를 반환합니다. 내가하려는 것은 토큰이 내가 사용하는 정규식 패턴과 일치하지 않는 경우 토큰 자체를 정수 코드로 반환한다는 것입니다. 예를 들어 '$'토큰은 println (number)가 $를 출력하도록 숫자를 반환합니다. 나는 그것을 어떻게하는지 전혀 모릅니다, 누구?내 자신의 StreamTokenizer를 자바로 빌드

감사합니다.

+3

'리턴'$ '를,'또는'리턴 (int)에'$ ','다음 'println ((char) number)'아마도? 그렇지 않은 경우 문제를 자세히 설명하십시오. –

+0

내가 시도해 볼게 - StreamTokenizer를 사용할 때 현재 토큰이 TT_NUMBER 또는 TT_WORD가 아닌 경우 st.nextToken()을 전환하고 대문자 '$'를 가질 수 있습니다. 즉 $ 기호를 나타내는 정수를 반환합니다 – itamar

답변

1

정규 표현식에서 렉서를 빌드하려면 ANTLR과 같은 파서 생성기를 살펴보십시오.

당신이 정말로, 당신은 항상 다음과 같은 관용구 자신의 사용할 수 있습니다 당신의 손으로 롤백하려면

:

// Matches tokens foo and bar 
Pattern myTokenDefinition = Pattern.compile("^(?:foo|bar)"); 

public boolean hasNext() { 
    return sourceText.length() != 0; 
} 

public String next() { 
    if (sourceText.length() != 0) { 
    Matcher m = myTokenDefinition.matcher(sourceText); 
    String token; 
    if (m.find()) { 
     token = m.group(); 
    } else { 
     token = sourceText.substring(0, 1); 
    } 
    sourceText = sourceText.substring(token.length()); 
    return token; 
    } 
    throw new NoSuchElementException(); 
} 
관련 문제