하이 라이터가 렉서를 사용하여 백그라운드 작업을 수행한다고 가정하면 라이브 구문 강조 표시가있는 IDE에서 타이핑 할 때 렉서가 전체 파일을 Java, C++, Python 등의 언어로 다시 토큰 화해야합니까?), 렉서는 현재 라인을 다시 읽거나 토큰 화해야하나요? 아니면 한 번에 하나의 문자/단어 만 사용하고 있습니까?IDE에서 구문 형광펜이 문자를 입력 할 때마다 전체 파일을 검색합니까?
많은 편집자/IDE에서 대부분의 코드는 프로그래머가 입력하는 것과 동일하기 때문에 묻습니다. 어떤 경우에는 나머지 문자열을 다시 강조 표시하는 문자열 리터럴을 시작하는 것과 같은 경우가 있습니다. , 다른 경우에는 여러 줄 주석을 시작하는 것과 같이 전체 텍스트 파일이 여러 줄 주석을 시작한 지점에서부터 파일 끝까지 다시 강조 표시됩니다.
입력 된 모든 단일 문자에 대해 전체 파일에 대해 어휘 분석을 수행해야하는 경우, 특히 더 큰 (100.000+ 줄) 텍스트 파일의 경우 속도가 느려지지 않습니까?
귀하의 의견으로 (또는 사실에 근거하여) Syntax Highlight가 모든 단일 입력 문자에 대해 전체 파일을 다시 토큰 화하는 것은 좋지 않습니까? 메모장과 같은 편집기가 어떤 역할을하는지 궁금 할뿐입니다. – ZimZim
저에게 이것은 속도와 구현의 복잡성 사이의 균형입니다. 예 : 더 똑똑한 당신이되고, 더 애매한 버그를 찾을 수 있습니다. 토큰 화는 정말 빠르기 때문에 전체 입력을 업데이트하면됩니다. 그러면 다른 언어를 지원해야 할 때 이상한 유물을 보지 않을 것입니다. 모든 키 누르기에서 강조 표시를하지 않을 수도 있습니다 (예 : 토큰 끝 ("단어"의 일부가 아닌 문자) 또는 사용자가 입력을 일시 중지 할 때까지 기다립니다. 물론 사용자 입력 경험이 영향을받지 않도록 토큰 화를 벤치 마크해야합니다. – Eugene
나는 Notepad ++에 익숙하지 않다. 예를 들어 Sublime과 Vim을위한 C/C++ 확장은 libclang을 사용합니다. 이것은 일부 캐싱을 수행하지만 전체 "번역 단위"(편집 된 파일 + 포함)를 재분석합니다. – Eugene