구문 분석 트리를 업데이트하기위한 효율적인 알고리즘


14

이미 이미 분석하고 파싱 한 큰 코드 블록이 있다고 가정 해 봅시다.
한 글자 만 바뀌 었다고 가정하자. 파싱을 업데이트하고 싶지만 수정이 전체에 비해 매우 작기 때문에 전체를 다시 파싱 할 수는 없지만 재분석 할 범위를 결정하는 알고리즘이 있는지 알고 싶습니다. 이동하는 토큰 경계를 올바르게 처리합니다.

미리 감사드립니다!


1
안녕하세요, 환영합니다! 나는 주제에 대해 전문가가 아니지만 찾고있는 키워드가 증분 구문 분석 또는 증분 컴파일 이라고 생각합니다 .
MS Dousti

@Sadeq 포인터 주셔서 감사합니다! 몇 가지 세부 정보가 포함 된 답변을 추가 하시겠습니까? 대단히 감사하겠습니다!
Agos

답변:


9

@Agos 요청에 따라 의견을 답변으로 바꿨습니다.

먼저, 나는이 분야에 대해 잘 알고 있지 않다는 것을 인정해야합니다. 그러나 친숙한 파서 작성효율적이고 유연한 증분 구문 분석 문서를 읽어 2000 년 이전의 증분 파싱 에 어떤 알고리즘이 사용되었는지 확인할 수 있습니다.

업데이트 된 치료를 위해 다음 논문을 살펴보십시오.

추가 정보 : 파싱 ​​/ 컴파일에는 두 가지 방법이 있습니다.

  • 배치 코드의 전체 블록을 구문 분석하는 방식, / 컴파일.
  • 증분 문서가 제 파싱하는 방법은, / 배치 모드로 컴파일 한 후 변화가 검출되고, 최소 재 해석 / 재 컴파일이인가된다. 이 접근 방식은 구문 분석 / 컴파일 속도를 증가시킬뿐만 아니라 백그라운드 컴파일 과 같은 IDE 멋진 기능을 지원하는데 , 이는 지연 컴파일 과 관련이 있습니다. IntelliSense 와 같은 상용 기능에 대해서도 검색 할 수 있습니다 .

1

증분 파서가 줄의 각 끝에서 상태를 저장하는 경우 마지막 유효한 파서 상태에서 다시 구문 분석하고 (가장 좋은 경우, 예를 들어 전체 구문 분석 후 수정이 시작되는 줄의 시작일뿐) 끝에서 구문 분석을 중지합니다. 수정이 끝나는 줄 (내부 파서는 수정을 넘어서서 구조를 올바르게 인식 할 수 있음)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.