2013-09-23 5 views
0

***과 일치시키고 싶습니다만, javacc는 라인의 어느 곳에서나 ***과 일치합니다. *** 앞에 공백이나 탭 이외의 다른 문자가없는 경우에만 ***과 일치하는지 어떻게 확인합니까? 이것은 내가 현재라인 일치 시작

< HORIZONTAL_RULE: <ZERO_OR_MORE_OF_TAB_OR_SPACE> ("**")("*")+> 
| <#ZERO_OR_MORE_OF_TAB_OR_SPACE: (" " | "\t")*> 

그러나 다시, 이것은 0 개 이상의 공백으로 앞에 붙인 *** 일치해야하는 것이다.

답변

1

어휘를 사용하십시오. 행의 시작에 DEFAULT 상태를 사용하십시오.

// Note that states do not apply to private regular expression definitions. 
TOKEN: <#ZERO_OR_MORE_OF_TAB_OR_SPACE: (" " | "\t")*> 

<DEFAULT> TOKEN: { 
    <HORIZONTAL_RULE: <ZERO_OR_MORE_OF_TAB_OR_SPACE> ("**")("*")+ > : MIDLINE 
} 
<DEFAULT, MIDLINE> SKIP { <OTHERCHAR: ~["\n","\r"]> : MIDLINE } 
<DEFAULT, MIDLINE> SKIP { <NEWLINE: "\n" | "\n\r" | "\r" | "\r\n"> : DEFAULT } 
+0

빠른 질문입니다.이 진술은 분실되었습니다. 좀 더 빛을주세요. '상태가 사적 정규 표현식 정의에는 적용되지 않는다는 점에 유의하십시오. – ShaggyInjun

+0

죄송 합니다만, 감사합니다. 하지만, 고마워. – ShaggyInjun

+0

감사합니다. 저는 왜 어휘 상태를 ZERO_OR_MORE_OF_TAB_OR_SPACE 프로덕션과 연관시키지 않았는지를 설명하려고했습니다. –