MySQL .g4 파일의 Parser와 Lexer를 https://github.com/antlr/grammars-v4/tree/master/mysql에 만들려고합니다. 첨부 된 이미지에서 볼 수 있듯이 "파서 규칙 '채널'이 렉서에 허용되지 않음"이 표시됩니다.이 ANTLR 4 Lexer 파일에서 "렉서에서 허용되지 않는 파서 규칙 '채널은 무엇입니까?
답변
렉서 전용 문법은 렉서 규칙을 포함 할 수 있습니다. 제 생각에는 여기서 사용하는 도구가 대문자로 시작하지 않으므로이 렉서 전용 문법에서 "규칙"channels
을 파서 규칙으로 해석하고 있기 때문입니다.
그러나 마이크의 의견은 정확합니다. 이 channels
구문은 (현재) 렉서 파일의 유효한 ANTLR 문법입니다. See this page.. 그것은 렉서 문법 파일에 들어가기로되어 있습니다. 따라서 여러분이 사용하는 도구 (IDE)가 channels
사용자 정의 스펙 구문을 이해하지 못한다는 것을 추측 할 수 있습니다.
해당 github 목록에있는 모든 문법이 완벽하고 ANTLR 본사의 일부가 아니며, 다양한 작성자와 때로는 다른 버전의 ANTLR이 주어진 순간에 사용하는 것임을 알고 있어야합니다.
'channels'는 규칙은 아니지만 문법에 의해 영향을받는 채널 목록이며 ** 오직 렉서 문법에 **서만 유효합니다. –
파서 파일에 포함됩니까? – nicomp
아니요,'channels' 명령은 렉서 문법에서만 허용됩니다. –
전혀 이해가되지 않습니다. 문법이 아니라 IDE에서 오류입니다. 어떤 IDE인가. 내 ANTLR4 확장명으로 Visual Studio Code를 시도하면 정확한 세부 정보를 얻을 수 있습니다. –
아마도이 IDE는 ANTLR의 오래된 버전을 사용합니다. 이러한 구문은 4.5 버전에서 나타났습니다. https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#channel –
@MikeLischke IDE는 Eclipse 용 ANTLR4 플러그인입니다. 나는 채널 라인을 주석 처리하고 필요한 경우 채널 번호를 하드 코딩함으로써이를 수정했다. – nicomp