2011-04-27 6 views
4

컴파일러 작성 이론 및 기술에 대한 수많은 서적 및 논문이 있어야합니다. 그 반대의 일에 어떤 자원이 있습니까? 특정 HW 플랫폼에는 관심이 없습니다. 주제와 어려움을 조사하는 좋은 책/연구 논문을 찾고 있습니다.역 컴파일 리소스 및 이론

+0

http://www.program-transformation.org/Transform/DeCompilation –

답변

1

디 컴파일은 실제로 잘못된 이름입니다. 디 컴파일러는 객체 코드를 소스 표현으로 컴파일합니다. 여러 가지면에서 기존 컴파일러보다 작성하기가 쉽습니다. '소스'코드는 이미 구문 검사를 거쳐 일반적으로 매우 정확하게 형식화되어 있습니다.

그들은 (주소의) 기호 테이블을 구축하고 응용 프로그램의 대상 언어 표현을 구성합니다. 일반적인 어려움은 원래 컴파일러가 공통 하위 표현식을 제거하고 루프에서 일정한 코드 및 기타 유사한 기술을 제거하여 원본 응용 프로그램을 더 크게 또는 덜 최적화해야한다는 것입니다. 이들은 종종 타겟 언어로 표현할 수 없습니다.

소스가 잘 정의 된 VM을위한 경우에는 종종이 최적화가 JIT 컴파일러에 남겨지며 결과 디 컴파일 된 코드는 매우 판독 가능합니다. 대부분의 경우 원본과 거의 동일합니다. 이 유형의 컴파일러는 종종 심볼의 일부 또는 전체를 오브젝트 코드에 남겨 둠으로써이를 복구 할 수 있습니다. 디버깅 및 문제 해결에 도움이되는 줄 번호가 포함 된 것도 있습니다. 이 모든 것이 원래 코드를 복구하는 데 도움이됩니다.

카운터에는 이름을 스크램블링하여 원본 소스를 간단하게 복원하지 못하도록 코드 변환을 의도적으로 수행하는 코드 난독 화기가 있으며 결과 코드를 변경하지 않고 시퀀스 코드를 변경하고 거기에 대한 구문을 도입합니다. 소스 언어와 동등한 것은 아닙니다.

2

저는 AS3 및 Java 디 컴파일러에서 작업했습니다. 디 컴파일과 관련하여 배웠던 모든 내용이 컴파일러 이론에서 직접 나온 것이라고 확신 할 수 있습니다. 중급 표현, 데이터 흐름 분석, 용어 다시 쓰기 및 기타 관련 개념은 모두 용 서적에서 찾을 수 있습니다.

+0

동일한 비트가 있지만 약간 다른 비트가 있습니다. 예를 들어 드래곤 북은 Earley 알고리즘에 대해별로 말하지 않고 실제로 사용하지 않는 것으로 보입니다. 그러나 디 컴파일은 본질적으로 모호하기 때문에 전체 컨텍스트 프리 파서가 실제로 필요합니다. 다시 한번, 이것에 관한 나의 경험은 http://rocky.github.io/Deparsing-Paper.pdf에있다. – rocky

0

동적 언어 용 디 컴파일러에 대해 작성했습니다 here.

사용자 지정 (상위 수준) VM을 사용하는 동적 언어의 경우에도 마찬가지입니다.