2012-06-07 3 views
1

JavaCC를 사용하는 법을 배우려하고 정규 표현식에 대한 지원이 있다는 것을 깨달았습니다.JavaCC에서 단축형 문자 클래스 (예 : d)가 지원되지 않습니다

TOKEN : { < #DIGITS : (\d)+ >} 

하지만 "컴파일러 컴파일러"

TOKEN : { < #DIGITS : (["0" - "9"])+ >} 

내가 같은 속기 문자 클래스를 사용하여 시도 : 게으른 전화 해하지만 난 자리를 정의하는 기본/일반적인 방법을 생각하는 것은 조금 너무 깁니다 그것을 좋아하지 않는 것 같습니다. 나는 속기 문자에 대한 어휘 오류를 얻는다. 문제에 대한 문서를 찾을 수 없어서 내가 잘못한 일을하고 있거나 단순히 지원되지 않는다고 확신 할 수 없습니다. 누구나 내 가정을 확인/거부 할 수 있다면 javacc는 속기 클래스와 잘 어울리지 않을 것입니다. 매우 감사 할 것입니다.

답변

1

당신의 지원이 올바르지 않습니다. JavaCC의 정규 표현식은 문자열 리터럴, 다른 정규 표현식에 대한 참조 및 미리 정의 된 정규 표현식 < EOF>에 대한 참조로만 구성됩니다.

그러나 코드를 사용하여 수행중인 작업은 자신 만의 바로 가기를 만드는 것입니다. 숫자 기호는 기호가 비공개임을 나타냅니다. 즉, 정규식 내에서만 사용할 수 있습니다. TOKEN : {< #D : ([ "0"- "9"]) +>}으로 정의하면 다른 토큰 정의 내에서 < D>를 사용할 수 있습니다.

바이너리 배포판에 포함되어있는 예제 문법 javacc.jj는 공식 문법이므로이 파일을 보면이 문법으로 파싱 할 수있는 것을 볼 수 있습니다. 출력은 본질적으로 문법 유효성 검사기 인 것 같습니다.