2012-05-15 1 views
1

나는 JavaCC를 사용하는 간단한 언어에 대한 파서를 연구 중이다. 내 토큰 선언 섹션에서토큰의 "그룹"정의하기

, 나는 인해 주문이

< CONSTANT: <INTEGER> | <FLOAT_NUMBER> | <BOOLEAN> > 

< INTEGER: "0" | ("-")? ["1"-"9"](["0"-"9"])* | "0x" (["0"-"9"] | ["a"-"f"] | ["A"-"F"])+ > 
< FLOAT_NUMBER: ("-")? (["0"-"9"])+ "." (["0"-"9"])+ ("E" ("-")? (["0"-"9"])+)? ("D")? > 
< BOOLEAN: "true" | "false"> 

CONSTANT 같은 것을 가지고 INTEGER보다 우선 순위이다. 그러나 내가 특별히 INTEGER을 필요로하는 문법 부분이 있습니다. 이러한 경우에 INTEGERCONSTANT으로 구문 분석되었으므로 파서가 예외를 throw합니다.

간단한 해결책은 CONSTANT 토큰을 제거하고 찾아서 (<INTEGER> | <FLOAT_NUMBER> | <BOOLEAN>)으로 바꾸는 것입니다. 그래도 다소 기이하게 느껴진다.

CONSTANT을 단순히 다른 토큰의 그룹으로 정의하는 방법이 있습니까? CONSTANT은 자체적으로 토큰이 아니지만 (<INTEGER> | <FLOAT_NUMBER> | <BOOLEAN>)의 약어일까요?

감사합니다.

답변

2

여기 간단한 대답은 토큰 화기에서하지 말아야한다는 것입니다.

Token parseConstant() : 
{ 
    Token t;  
} 

{ 
    (
     t = <INTEGER> | t = <FLOAT_NUMBER> | t = <BOOLEAN> 
    ) 
    { 
     return t; 
    } 

} 
+0

가 동의, 감사 :

같은 생산 규칙이 점을 넣어하는 것이 좋습니다. –

관련 문제