필자 자신의 렉서 작성을 시작했으며 토큰 화 문자열에 시작 문자 (")와 끝 문자 (")가 있으므로 문제가 발생했습니다.Lexer : 토큰 화 중에 종결되지 않은 문자열 처리
누구든지 렉서 (lexer)가 종결되지 않은 문자열을 가지고 있어도 계속 렉싱 할 수있는 일반적인 기술을 알고 있습니까? ANTLR에서 ATN이 처리하는지 ANTLR이이를 수행 할 수 있다고 생각하십니까?
내가 거기 문자열이 한 줄에 종료해야한다는 것을 가정하고 여기에 두 가지 문제가되는 볼 수 있습니다
- 문자열 종료는 별도의 줄에 발생 - 따라서 문자열은 단일에 넣어 수 있습니다 사용자에게 경고 선.
- 문자열 종료가 발생하지 않으면 계속할 유효 시점은 언제입니까? 새 행 다음에 유효한 다음 토큰의 추론을 사용하십시오.
즉
char *mystring = "my string which is unterminated....
int id = 20;
어딘가에 오류 처리가 렉서가 아닌 파서에 던져진 것이 훨씬 더 나은 해결책을 읽었습니다. 여기에 토큰이 없기 때문에이 점에 대한 귀하의 의견은 무엇입니까? 여기에 토큰이 없으므로 어떻게 전달합니까? – Har
@har : 오류 처리를 중앙 집중화하기위한 인수가 있지만 스캐너에서 어휘 오류가 항상 감지 될 것입니다. 나는 보통 yyerror를 호출하여 오류를보고한다. 나쁜 토큰 (똑같이 나쁜 번호에 적용됨)의 경우 일반적으로 수행해야 할 것이 없습니다. 물론 "나쁜 리터럴 (bad literal)"토큰을 반환 할 수 있고, BAD_LITERAL을'value' (또는 당신의 기본 비 - 터미널이 무엇이든)로 변환시키는 단위 프로덕션으로 파서에서 에러 메시지를 생성 할 수 있습니다. 오류. – rici