2017-03-22 1 views
0

저는 JavaCC의 초보자입니다. 중복되지 않는 경우에만이 문자열을 허용하고 싶습니다. '= B'= B! ''내가 뭔가 기본적인 실종 해요 같은 느낌JavaCC Beginner - 중복이없는 경우에만 프로그램에서 수락하도록하려면 어떻게합니까?

B '경우

A B C 
A' B' C' 
A'' B'' C'' 

파서는 그것을 받아 들일 것이다, 나는 할 수 있습니다! 그래서 입력은 아래의 경우 JavaCC에 대한 온라인 튜토리얼을 쉽게 설명 할 수 있습니다. 누군가가 글쓰기 방향으로 나를 가리킬 수 있다면 그것은 좋을 것입니다. advance.`

편집에

감사 : 나는 관계없이 중복, 현재 나의 파서 위의 입력을 받아들이는 것을 지적한다.

+0

일반적으로 구문 분석기의 책임이 아니라는 의미 론적 분석 범주에 해당합니다. – rici

답변

1

다음과 같이 할 수 있습니다. 파서 클래스, 그럼에 필드

Set<String> seen = new HashSet<String>() ; 

(이는 비 정적 파서 가정된다. 파서가 정적 인 경우,이 필드의 정적이어야하며 reinit 함수로 초기화되어야한다.)

선언 당신의 작품은 이런 식으로 할 수 있습니다.

void start() : { Token t ;} { 
    ( <A> 
    t = <B> { if(seen.contains(t.image)) { 
        throw new ParserException("Duplicate") ; } 
       else { seen.add(t.image) ; } } 
     <C> 
    )* 
} 
+0

Hashset을 선언 할 위치를 찾는 데 어려움을 겪고 있습니다. 만약 내가 위와 같이 해보았다면, 라인 부분에서 컴파일하는 동안 에러가 발생합니다. – Rikg09

+0

죄송합니다. 이 문제에 대해 대단히 고마워합니다. JavaCC에 대해 더 자세히 설명 할 수있는 이해하기 쉬운 자습서가있는 사이트를 알고 계십니까? 나는 내가 많이 잘못 이해하고있는 것처럼 느낀다. – Rikg09

+0

JavaCC FAQ에는 책과 자습서 목록 (다소 오래된 것)이 있습니다. http://www.engr.mun.ca/~theo/JavaCC-FAQ/ JavaCC FAQ 자체는 훌륭한 자료이기도 합니다만, 빈번하게 개정되지는 않습니다. –