2013-01-31 3 views
1

선택적으로 javacc가 토큰 중 일부를 탐욕스럽게 매치시킬 수 있습니까? 나는 다음과 같이 정의 된 개체를하기 위해 노력하고있어욕심 꾸러기가 javacc에서 일치합니다

는 :

a. {HELLO} 
b. {HELLO} {WORLD} 
c. {HELLO} {OUR} {WORLD} 

가 올바르게 구문 분석하고 JavaCC에 곱슬에서 토큰을 소비하는 것 :

<CURLED:  "{" (<CHAR>)+ "}"> 

내가하고 싶은 것은 순서가 있다는 것입니다 브래킷은 개별적으로. 기본적으로

는 JavaCC에 사례의 B 가능성이 가장 긴 경기는 확인을 시도하고 같은 구문 분석되고 결국 C :

b. HELLO} {WORLD 
c. HELLO} {OUR} {WORLD 

내가 뭔가를 분명 실종?

답변

0

좋아요, 나는 "{"문자가 CURLED 토큰 정의에서 발생하는 것을 허용하지 않음으로써이 문제를 해결했습니다. 이 제외는 ~ [ "{"]을 사용하여 수행됩니다.

+1

"{"문자를 허용하려면 렉시 컬 상태를 사용할 수 있습니다. 그러면 문제는 C 스타일 주석과 일치하는 문제와 매우 유사합니다. 예 :/**/** /는 유효한 주석이며/** // ** /는 두 개의 주석입니다. 토론에 대해서는 JavaCC FAQ를 참조하십시오. –

+0

@TheodoreNorvell 귀하의 회신에 감사드립니다! 내가 주 (비록 그들을 구현하는 방법을 읽기 시작 했음에도 불구하고)가 {{ ','} '의 쌍을'{} '로 중첩시키는 것을 허용하지 않는다는 이유는 (C 스타일 코멘트). –

+1

그러면''{ "(~ ["{ "]) +"} "'가 길입니다. –