단위조작 예제

Posted on

오류 없이 구문 분석된 모든 변환 단위는 파일에 저장할 수 있습니다. 그런 다음 clang_createTranslationUnit()이 있는 새 CXTranslationUnit으로 번역 단위를 역직렬화하거나, 헤더에 해당하는 불완전한 번역 단위인 경우 다른 번역 단위를 구문 분석할 때 미리 컴파일된 헤더로 사용할 수 있습니다. 암시적 미리 컴파일된 헤더는 원본이 자주 변경되지 않을 때 특정 번역 단위가 여러 번 재분석될 가능성이 있는 경우 최적화로 사용됩니다. 이 경우 암시적 미리 컴파일된 헤더는 주 파일의 맨 위에 있는 모든 초기 포함 을 포함하는 것으로 작성됩니다(파일의 “프리앰블”이라고 함). 후속 구문 분석에서 프리앰블이나 해당 파일의 파일이 변경되지 않은 경우 clang_reparseTranslationUnit()은 암시적 미리 컴파일된 헤더를 다시 사용하여 구문 분석 성능을 향상시킵니다. 이러한 형식은 비교할 수 있으므로 위의 마지막 줄에 표시된 것처럼 비교를 수행할 수도 있습니다. 다시, 무료. 우리가 아직 다루었던 것은 거리와 지속 시간의 혼합인 속도와 같은 복합 단위입니다. 따라서 속도 제한을 사용하려면 90.km/h 쓰고 싶지만 현재 상태의 DSL은 90.km/1.h 작성할 수 있습니다. 이 문제를 피하기 위해 단위만큼 많은 변수를 만들 수 있습니다.

우리는 h 변수, km 변수 등을 가질 수 있습니다. 그러나 스크립트 자체가 이러한 단위를 제공하도록하여 더 자동으로 무언가를 선호합니다. Groovy 스크립트에서는 로컬 변수를 가질 수 있지만(변수를 정의할 때마다 로컬 변수입니다) 바인딩을 통해 변수를 전달하거나 액세스할 수도 있습니다. 예를 들어 Java 응용 프로그램 내부에 Groovy를 통합하여 특정 데이터 컨텍스트를 공유할 때 데이터를 전달하는 편리한 방법입니다. 그루비 스크립트와 함께 사용되는 모든 비 로컬 변수가 이 바인딩에서 조회되도록 getVariable() 메서드를 재정의하는 UnitBinding이라는 새 바인딩을 만듭니다. println() 메서드가 사용할 출력 스트림을 찾는 변수 `out`에 대한 특별한 처리를 알 수 있습니다. CXTranslationUnit_SkipFunctionBody와 함께 사용하면 함수 바디를 프리앰블으로 건너뛰는 것을 제한합니다. 이제 “정렬”을 위해. 유효하지 않은 텍스트 필드를 만들어야 합니다. 텍스트 유형이 있는 빈 입력 요소는 트릭을 수행합니다.

실제 코드의 경우 일반적으로 JQuery와 같은 DOM 조작 라이브러리를 사용하지만 이 예제에서는 작업을 단순하게 유지하려고 했습니다. 일시 중단된 변환 단위는 메모리를 훨씬 적게 사용하지만 다른 쪽에서는 clang_reparseTranslationUnit 이외의 다른 호출을 지원하지 않으므로 다시 시작하거나 clang_disposeTranslationUnit을 사용하여 완전히 삭제합니다.