2013-05-26 3 views
1

아래 문법에서는 '으로 시작하는 줄을 한 줄 주석으로 구성하고 /' Multiline Comment '/ 사이의 항목을 구성하려고합니다. 한 줄짜리 주석은 잘 작동합니다. 하지만 어떤 이유로 든 / 또는 ' 또는 ';' 또는 < 또는 '>'오류가 발생합니다. 위의 문자가 구성되어 있지 않습니다. 기본값으로 간주되고 구문 분석을 건너 뛰지 않아야합니까?줄 0, 열 0에서 어휘 에러가 발생했습니다.

오류

Lexical error at line 0, column 0. Encountered: "\"" (34), after : "" 
Lexical error at line 0, column 0. Encountered: ">" (62), after : "" 
Lexical error at line 0, column 0. Encountered: "\n" (10), after : "-" 

는 난 단지 간결함을 위해 아래 코드의 일부를 포함했다. 전체 렉서 정의를 보려면 link

TOKEN : 
{ 
    < WHITESPACE: 
    " " 
| "\t" 
| "\n" 
| "\r" 
| "\f"> 
} 

/* COMMENTS */ 

MORE : 
{ 
    <"/'"> { input_stream.backup(1); } : IN_MULTI_LINE_COMMENT 
} 

<IN_MULTI_LINE_COMMENT> 
TOKEN : 
{ 
    <MULTI_LINE_COMMENT: "'/" > : DEFAULT 
} 

<IN_MULTI_LINE_COMMENT> 
MORE : 
{ 
    < ~[] > 
} 

TOKEN : 
{ 
    <SINGLE_LINE_COMMENT: "'" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> 
} 

답변

3

문제의 모든 측면을 재현 할 수 없습니다. "as soon"오류가 발생하면 특정 문자를 입력합니다. 여기 내가 얻는 것이 있습니다.

  • / 다음 문자가 '이 아니면 오류가 없습니다. 다음 문자가 '이 아니면 오류가 있습니다.
  • ' 오류가 표시되지 않습니다. 이것은 주석의 시작으로 올바르게 처리됩니다.
  • ; 항상 오류가 있습니다. 토큰은 ;으로 시작할 수 없습니다.
  • < 다음 문자가 - 또는 <-이 아닌 경우에만 오류가 발생합니다.
  • > 항상 오류가 있습니다. 토큰을 시작할 수 없음 >

렉서에는 이러한 경우를 다루기위한 규칙이 없으므로 이러한 오류가 예상되지 않는 이유가 확실하지 않습니다. 일반적으로 입력 접두사와 일치하는 규칙이없고 입력이 모두 소모되지 않으면 TokenMgrError이 발생합니다.

당신이 (자주 묻는 질문에 설명 된대로) 포괄 규칙을 모든 TokenMgrError의 제거 확인하려면

:
TOKEN: { <UNEXPECTED_CHARACTER: ~[] > } 

이이 .jj 파일의 맨 마지막 규칙이 있는지 확인합니다.이 규칙은 다른 규칙이 적용되지 않으면 다음 문자가 UNEXPECTED_CHARACTER 토큰으로 처리됨을 나타냅니다. 물론 이것은 문제를 파싱 레벨까지 부팅합니다. 당신이 정말로 속하지 않는 모든 문자를 건너 토크 나이를 원하는 경우에, 다만 맨 마지막 규칙으로 다음과 같은 규칙 를 사용 : 대부분의 언어에 대한

SKIP : { < ~[] > } 

, 이상한 일을 할 것, 어떤 이것이 기본값이 아닌 이유입니다.

+0

어제 시도한 것들 중 하나는 'TOKEN : {}'입니다. 다른 이유로 인해 작동하지 않았습니다. IDE에서 구문 하이라이팅을 제공하기 위해이 렉서를 개발 중이므로 '입력하자 마자'라고 말했습니다. 파서를 아직 구현할 계획이 없습니다. 언어에 속하지 않는 문자는 건너 뛰어도 충분합니다. 나는 이것을 고치려고 하루 종일 보냈고 오늘 아침에 답을보고 한 번에 해결할 수있었습니다. 나는 그들이 당신을 과학자라고 부른다고 생각합니다 :). 이와 같은 답변은 적어도 100 점을 부여해야합니다. 고마워. 감사합니다. – ShaggyInjun

+0

. 당신은 그 해결책을 가지고있었습니다. 프로젝트에 행운을 빌어 요. –