2010-11-29 2 views
1

에서 검색하기 : 답변에 제안자바 정규 표현식은 다음과 같은 문자열을 진행하는 방법 문자열

[p('WHITE'),p('GREEN'),p('GREEN','RED'),p('GREEN','YELLOW'),p('GREEN','YELLOW','RED')] 

이 노드의 목록을 얻을 수 있습니다.

+0

이있는 문자열 목록을 얻으려면 : 마지막에 내가 자동으로 객체의 잘 모델링 나무를 수 있도록 플러스, 나는 추상 구문 트리로 문자열을 구문 분석 할 것인가? p ('와') 사이의 값은? 고유하거나 고유하지 않은? –

+0

문자열처럼 보이지 않습니다. 큰 따옴표로 묶여 있습니까? – Skilldrick

+0

찾고있는 예상 출력은 무엇입니까? 당신이 준 예를 위해 당신이 원하는 정확한 출력을 줄 수 있습니까? –

답변

4

표현식이 얼마나 복잡한 지에 따라 다릅니다. 필자는 적절한 구문 분석기를 쓸 것입니다. 이후로는 제대로 수행 할 수 있다고 확신 할 수 있기 때문입니다.

class Node { ... } 

class StringLiteral extends Node { 
    public String getValue() { ... } 
} 

class Term extends Node { 
    public String getName() { ... } 
    public int getArity() { ... } 
    public Node getArgument(int index) { ... } 
} 
+0

네가 맞습니다. 하지만 이제 어떻게이 노드들을 얻기 위해 문자열을 파싱 할 것인가 ?? –

+0

기본적인 개념은 관심있는 구문 요소마다 하나의 메소드를 가진'Parser' 클래스를 작성하는 것입니다.'List parseArray()','Term parseTerm()','StringLiteral parseStringLiteral()'이라고 부릅니다. ,'노드 parseExpression()'. 'parseArray'의 구현은 대략'read ('['])와 비슷합니다; while (next()! = ']') {parseExpression(); } read (')');'. 이 메소드는 기본적으로 이러한 조작의 순서 또는 입력에서 다음 문자에 따라 다음 구문 분석 대상을 결정하는 대형 스위치 명령문을 포함합니다. –

관련 문제