2013-05-01 3 views
1

Im, Javacc에서 문법을 만들려고합니다. 함수 이름에 대해 더 낮은 문자 또는 'main'을 포함 할 수 있습니다. 'main'이 함수 이름이면 다른 절차를 수행해야합니다.Javacc에서 토큰으로 문자열을 제외하지 않습니다.

내 문제는 선택 항목으로 포함되고 대신 일치하는 경우 주를 문자열 리터럴로 일치시킬 수 없다는 것입니다. 그래서 토큰에서 'main'이라는 단어를 제외하면 작동 할 것입니다.

< FUNCNAME: (["a"-"z"])+ ~["main"]> 

답변

2

가장 쉬운 방법은 "메인"을 다른 토큰으로 만드는 것입니다.

TOKEN: { <MAIN: "main" > } 
TOKEN: { <FUNCNAME: (["a"-"z"])+ > } 

두 규칙 모두 접두사 "main"과 일치하지만 첫 번째 것이이기 때문에 첫 번째 것이 우선합니다. "유지"는 여전히 최대 뭉크 규칙에 의해 FUNCNAME입니다. JavaCC FAQ의 FAQ 3.3을 참조하십시오.