역 추적을 사용하는 재귀 적 파생어에서 모든 토큰을 목록에 보관하는 것은 좋지 않은 생각입니까? 무한한 수의 토큰이 없으면 좋은 접근 방법이라고 읽었습니다.하지만 큰 파일이 있고 토큰 수가 많으면 어떻게 될까요? 성능에 큰 영향을 줄까요?구문 분석 : 목록에있는 모든 토큰을 좋지 않게 생각하고 있습니까?
답변
너무 걱정하지 않아도됩니다. 파일이 너무 커서 한 번에 모든 토큰을 저장하면 상당한 양의 메모리가 필요하다면 추상 구문 트리도 너무 많은 메모리를 사용하게됩니다. 일반적으로 전체 파일의 표현을 조만간 메모리에 표시해야 할 가능성이 높습니다. 단일 패스 컴파일러는 대부분의 현대 언어에서 가능하지도 않으며, 단일 패스 컴파일러 (예 : C)를 사용하기 위해 방해가되는 언어는 개발 경험이 떨어지는 언어로 비용을 지불합니다.
또한, 우리는 C/C++ 스타일의 프리 프로세서 모델에 대해 얘기하지 않는 가정, 합리적인 코드 파일도 매우 공간 비효율적 토큰 데이터 형식이 현실적으로보고있는 것을 의미 메가 바이트보다 작은 더 이상은 수십 메가 바이트가 아닙니다. 큰 파일은 병리학 적이며 문제가 아닌 큰 파일을 쓰는 사람들의 문제입니다.
의도 한 언어 사용을 고려해야합니다. 사람들은 10 억 라인 C 프로그램을 작성하지 않지만 일부 다른보다 조밀 한 언어에서 수십억 줄의 C 코드를 생성하는 코드 생성기가 있습니다. –
@ChrisDodd C는 적당한 크기의 C 및 C++ 파일을 컴파일 할 때 #include에서 100k + 라인의 코드를 토큰 화하기 때문에 종종 이상한 예입니다. 또한 최신 C 컴파일러는 더 이상 단일 패스가 아니므로 10 억 라인의 코드를 쓰면 문자 그대로 기가 바이트의 메모리를 소비하게됩니다. – delnan
@delnan : 그리고 수십억 개의 RAM이있는 PC를 구입하여 신용 카드를 거의 알아 채지 못했기 때문에 억 라인 C 프로그램을 매일 컴파일하는 경우 문제가되지 않습니다. (필자는 백만 줄의 C 소스 파일을 보았지만 [10 억 라인을 보지 못했습니다]). –
저는 @Delnan과 일반적으로 일치합니다. 어쨌든 대부분의 컴파일러는 컴파일되는 프로그램의 크기에 비해 방대한 양의 메모리가있는 시스템에서 실행되므로 공간이 문제가되지 않습니다.
만약 내가 당신이 전체 AST를 저장하려고한다면, 당신은 본질적으로 토큰리스트를 어쨌든 AST의 잎처럼 저장하고 있습니다.
방향을 제시합니다. 전체 토큰 목록을 단독으로 저장하지 마십시오. AST 잎을 표현하기 위해 AST 잎을 사용하기 만하면됩니다.
- 1. jwt-go와 토큰을 구문 분석
- 2. 구문 분석 설치에서 장치 토큰을 검색하는 방법
- 3. 구문 분석 트리에서 특정 토큰을 제외하십시오.
- 4. Wordpress - "구문 분석 오류가 예기치 않게 발생했습니다"?
- 5. 왜 ANTLR 구문 분석 토큰을 건너 뛰고 있습니까?
- 6. 구문 분석은 목록에있는 모든 텍스트는 이전
- 7. 부스트 토큰을 구문 분석 할 때 기본 문자열의 인덱스
- 8. AngularJS 방식을 생각하고 있습니까?
- 9. 텍스트로 필터 성능이 좋지 않게 수정하는 방법
- 10. haskell의 이진 파일 구문 분석 성능이 좋지 않음
- 11. 목록에있는 모든 숫자 추가
- 12. 형식 레이블이 지정된 토큰을 구문 분석 트리로 변환하는 방법은 무엇입니까?
- 13. 파이썬 특정 구문 분석
- 14. 스핑크스를 생각하고 HAVING에 대한 올바른 구문
- 15. 구문 텍스트 편집기에서 구문 분석
- 16. 구문 분석 로그인 창에서 UIView가 예기치 않게 텍스트 필드를 이동합니다.
- 17. 구문 분석 검색 결과
- 18. ArrayList의 모든 요소가 예기치 않게
- 19. shared_ptr을 올바른 구성원으로 생각하고 있습니까?
- 20. Java - TI-84 토큰을 16 진 코드로 구문 분석
- 21. JQ - 구문 분석 데이터
- 22. HTML (android) 구문 분석
- 23. 왜 구문 분석 오류가 있습니까?
- 24. PHP 구문 분석 오류가 있습니까?
- 25. 왜이 구문 분석 오류가 있습니까?
- 26. 줄에서 정수 구문 분석
- 27. PHP에서 문자열의 모든 일을 구문 분석
- 28. 모든 값을 지정하지 않은 날짜의 구문 분석
- 29. 파일의 모든 숫자를 BigDecimal Java로 구문 분석
- 30. ANTLR : 구문 분석 파일
FWIW는 일반적으로 프로그램의 텍스트 표현이 토큰 목록보다 크기 때문에 소스 코드를 RAM에 완전히로드 할 수 있으면 토큰 목록이 비교적 작아집니다. 즉, 코드가 RAM에 거의 들어 가지 않으면 단일 바이트를 추가해도 메모리가 폭발적으로 늘어날 수 있습니다. 그러나 이것이 기술적으로 문제가 될 수는 있지만 실제로는 거의 없다고 말할 수는 없습니다. 나는 이것이 실제로 문제가 될 때까지 이것에 대해 걱정할 때까지 기다릴 것입니다. – uliwitness