KR20060009843A - 기계를 이용한 파일 처리 방법, 컴퓨터 프로그램 제품 및파일을 처리하도록 프로그래밍된 기계 - Google Patents
기계를 이용한 파일 처리 방법, 컴퓨터 프로그램 제품 및파일을 처리하도록 프로그래밍된 기계 Download PDFInfo
- Publication number
- KR20060009843A KR20060009843A KR1020057019534A KR20057019534A KR20060009843A KR 20060009843 A KR20060009843 A KR 20060009843A KR 1020057019534 A KR1020057019534 A KR 1020057019534A KR 20057019534 A KR20057019534 A KR 20057019534A KR 20060009843 A KR20060009843 A KR 20060009843A
- Authority
- KR
- South Korea
- Prior art keywords
- file
- preprocessing
- information
- files
- common
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
복수의 소스 파일 및 하나 이상의 헤더 파일이 제공된다. 헤더 파일은 복수의 소스 파일이 나타내는 정보를 포함한다. 상기 원본 파일이 각각 전처리되어서 각각의 전처리 파일을 생성하며, 이 전처리는 제 1 헤더 파일로부터의 정보를 사용해서 복수의 소스 파일을 확장하는 것을 포함한다. 통합 전처리 단계가 적용되어서 전처리 파일로부터의 정보를 조화해서 변화시킨다. 변화된 전처리 파일은 수정된 소스 파일 및 헤더 파일을 재생성하는 데 사용된다. 제 1 헤더 파일을 재생성하기 위해서, 전처리된 파일 중 하나는 선택된 파일이 제 1 헤더 파일로부터의 정보를 정교하게 만드는 것을 검출한 것에 기초해서 선택된다. 제 1 헤더 파일은 상기 선택된 파일의 정보로부터 재생성된다.
Description
본 발명은 예컨대, 소스 및 헤더 파일과 같은 복수의 파일로 이루어진 컴파일가능 컴퓨터 프로그램의 처리에 관한 것이고, 더 일반적으로는 복수의 파일로 이루어진 컴파일가능 기능 시스템 디스크립션의 처리에 관한 것이다.
큰 컴퓨터 프로그램의 생성은 통상적으로 많은 수의 컴퓨터 파일을 결합하는 것을 포함한다. 설계를 관리할 수 있게 하기 위해서, 소스 코드의 모듈은 어느 정도까지는 별도로 설계되어 처리될 수 있는 서로 다른 파일로 분배된다. 예컨대, C++ 프로그래밍은 다수의 소스 파일에 분배될 수 있는 다수의 클래스를 사용하는 것을 포함한다. 소스 파일은 신택스 에러에 대해 체크되어서 다른 소스 파일의 목적 코드로 별도로 컴파일될 수 있다. 다른 소스 파일로부터 나온 정보는 최종 단계인 연결 단계(linking)에서만 결합되어서 기계 수행가능 컴퓨터 프로그램을 생성한다.
소스 파일의 별도 처리 동안, 소스 파일을 다중화시키는 데 설계 정보의 요 소를 사용할 수 있게 할 필요가 있다. C++ 프로그램에서, 예컨대, 클래스 정의는 클래스를 사용하거나 클래스를 구성하기 위해서 다른 소스로 액세스할 수 있어야 한다. 이를 위해서, 공유 가능 설계 요소를 포함하는 헤더 파일이 사용된다. 설계 정보의 요소를 사용하는 이들 소스 파일은 "포함 상태(include statements)"를 갖고 있으며, 이는 요소를 포함하는 헤더 파일도 나타낸다. 헤더 파일이 포함 상태를 가질 수도 있다.
신택스 체크 및 컴파일을 수행하기 전에 각각의 소스 파일은 그 소스로부터의 코드를 포함하는 전처리된 파일을 생성하는 전처리기에 의해 전처리되지만, 포함 상태이기도 한 헤더 파일로부터의 정보를 대치함으로써 포함 상태가 확장된다. 전처리기가 이를 반복적으로 수행한다. 헤더 파일이 포함 상태를 갖고 있는 경우, 간주되는 정보는 전처리 파일 등에서 확장된다. 이는 간주되는 헤더 파일로부터의 정보의 두 번 이상의 중복을 포함할 수 있다. 프로그래머는 통상적으로 전처리기가 이러한 중복을 억제하게 하는 추가적인 포함 상태를 추가한다. 이러한 추가적인 포함 상태는 이전의 헤더 파일의 확장이 없다는 조건으로 헤더 파일을 포함한다. 많은 경우에, 이러한 억제가 필요하며, 이는 억제되지 않으면 중복 형성이 삽입되어서 컴파일을 방해할 것이기 때문이다.
전처리된 파일은 신택스 체크 및 객체 파일 생성에 사용된다. 연결 단계에서, 객체 파일이 결합되어서 수행가능한 프로그램을 생성한다. 이로써 초기 분리 소스 파일 처리 단계와 최종 통합(collective) 파일 단계로 엄격하게 분리된다. 초기 단계에서, 각각의 소스 파일은 분리해서 처리되지만, 최종 단계에서는 소스 파일로부터 유도된 모든 파일이 통합 처리된다. 통합 파일 처리 단계 이후에는 분리 소스 파일 처리 단계가 없다.
그러나, 다양한 이유로, 분리 파일 처리 단계와 통합 파일 처리 단계를 반복해서 번갈아 사용함으로써 이러한 엄격한 분리로부터 벗어나는 것이 제안되었다. 미국 특허 제 5,920,723호는 연결 단계 이전에 통합 소스 파일 최적화 처리 단계가 수행되는 처리를 나타내고 있다. 최적화 단계는 연결 단계 이전에 다른 소스 파일로부터 유도된 정보를 결합해서 프로그램 코드를 최적화한다. 최적화는 인스트럭션의 수정, 인스트럭션의 이동, 과잉 인스트럭션의 제거, 보상 인스트럭션의 추가 등을 포함할 수 있다. 최적화 단계는 최적화된 중간 파일을 각각 생성하되, 이는 소스 파일 각각에 대응한다. 최적화 단계 이후에, 중간 파일은 한번 더 별개 처리되어서 객체 파일을 생성한다. 객체 파일은 최종적으로 통합 처리되어서 객체 파일을 수행가능한 프로그램으로 연결시킨다.
이론상, 중간 파일은 소스 파일과 같은 신택스로 처리될 수 있다. 따라서, 소스 파일과 중간 파일이 모두 같은 컴파일러 프로그램에 의해 처리될 수 있어서, 별개 컴파일러가 필요없다. 별개 처리 단계와 통합 처리 단계가 번갈아 수행될 때, 처리되는 정보를 별개의 파일로 분리하는 방법에 문제가 발생할 수 있다. 미국 특허 제 5,920,723호의 경우에, 이러한 문제가 거의 나타나지 않는데, 그 이유는 소스 파일과 중간 파일이 일 대일 관계이기 때문이다. 중간 파일은 원본 헤더 파일을 사용해서 별개로 컴파일될 수 있다.
종래의 최적화보다 더 프로그램을 재구성할 필요가 있을 때 문제가 발생하 며, 예컨대 헤더 파일도 수정될 수 있다. 이러한 타입의 재구성은 예컨대 서로 다른 타입의 (다중)프로세서에서 수행하도록 프로그램을 재설계할 때, 예컨대 다른 프로그램 요소 사이에서 통신 채널을 대치할 때 필요할 수 있다. 이 경우, 소스 파일 및 헤더 파일은 전처리기에 의해 전처리된다. 전처리 결과, 헤더 파일로부터의 같은 정보를 카피하는 것이 다른 전처리된 파일에서 발생할 수 있다. 헤더 파일로부터의 이러한 정보가 변화될 때는 무엇보다 다른 전처리된 파일에서 발생하는 같은 헤더 파일로부터의 정보가 일정하게 변화되지 않게 해야 된다. 또한, 통합 처리 단계 종료시에 헤더 파일을 재생성하고, 이 재생성된 헤더 파일을 나타내는 포함 상태를 재도입하는 것이 바람직할 수 있다(용어 "재생성된" 파일이란, 통합 처리 단계의 결과에 따라 수정된 원본 파일에 대응하는 파일을 나타낸다). 따라서 전처리된 소스 및 헤더 파일은 원본 소스 및 헤더 파일에 사용가능한 툴을 가지고 처리될 수 있다. 이는 헤더 파일 생성의 추가적인 문제를 야기한다.
일단, 전처리 파일에서 원본 헤더 파일이 식별될 수 있는 경우에, 수정에 따라서 새로운 헤더 파일 및 새로운 포함 상태는 그 정보로부터 재생성될 수 있다. 그러나, 전처리 동안의 헤더 파일의 확장이 조건부 포함 상태로 인해서 불완전해질 수 있기 때문에 이는 불가능하다. 따라서, 헤더 파일과 같은 공통의 파일로부터 나온 정보를 사용해서 각각의 소스 파일이 전처리되고, 이어서 통합 수정되는 경우에 다중 파일 처리에 문제가 있으므로, 새로운 소스와 공통 파일은 수정 이후에 재생성되어야 한다.
무엇보다 본 발명의 목적은 수정된 전처리된 파일로부터 소스 파일 및 공통 파일을 재생성하는 방법 및 시스템을 제공하는 것이다.
본 발명의 다른 목적은 소스 파일 중 공통 파일로부터의 정보의 확장을 포함하는 버전으로부터 공통 파일을 재생성하는 것이다.
본 발명에 따른 방법이 청구항 1항에 개시되어 있다. 하나 이상의 공통 파일(예컨대, 헤더 파일)로부터 확장된 추가 정보를 가진 각각의 원본 파일(예컨대, 소스 파일)로부터 각각 생성된 전처리 파일은 조화되어서(coordinated) 변화된다. 변화를 수행한 이후에, 전처리 파일은 원본 파일용 재생성된 파일(예컨대, 재생성된 소스 파일) 및 공통 파일용 재생성된 파일(예컨대, 재생성된 헤더 파일)모두를 재생성하는 데 사용된다. 공통 파일로부터 다른 전처리 파일로 확장된 다량의 정보가 달라질 수 있기 때문에, 생성된 파일이 충분히 완료되는 것을 보장할 특별한 주의가 요구된다. 따라서, 완전한 헤더 파일 정보를 충분히 포함할 것으로 예상되는 전처리 파일이 선택되어서 공통 파일을 생성하거나, 적어도 완전성을 측정하는 재생의 일부로 사용되어야 한다. 공통 파일의 재생성을 위해 선택된 전처리 파일은 원본 파일이 헤더 파일에 대해서 만든 기준 타입에 기초해서 선택된다. 공통 파일에 정의된 소프트웨어 성분의 구현을 포함하는 전처리 파일은 헤더 파일을 생성하는 데 사용된다. 소스 및 헤더 파일을 생성한 이후에, 파일은 예컨대 객체 파일로 컴파일됨으로써 별개로 처리될 수 있고, 후속해서 연결되어서 예컨대 수행가능 프로그램을 생성한다. 컴퓨터는 후속해서 이러한 수행가능 프로그램의 인스트럭션을 수행할 수 있다.
위에 설명된 바와 같이, 전처리 파일은 공통 파일에서 선언된 소프트웨어 성분의 구현을 검출하는 것에 기초해서, 그 공통 파일의 재생성을 위해 선택되는 것이 바람직하다. 바람직하게는 선택은 조화된 통합 처리 전에 행해져서, 공통 파일의 경우에는 선택된 전처리 파일로부터의 정보만이 조화된 처리를 위해 컴퓨터 메모리에 유지되어야 한다. 바람직하게는, 2개의 패스 처리가 사용된다. 제 1 패스는 어느 공통 파일에 어느 전처리 파일이 사용되어야 할지 결정한다. 제 2 패스는 선택된 전처리 파일로부터의 공통 파일 정보를 획득한다. 제 1 패스는 전처리 파일의 판독 순서를 결정해서, 각각의 전처리 파일의 위치가 이 순서로 선택되어서 각각의 전처리 파일이 하나 이상의 소프트웨어 성분을 나타내는 소프트웨어 성분의 구현을 포함하는 경우에 각각의 전처리 파일은 이 순서에서 하나 이상의 소프트웨어 성분 모두의 구현을 포함하는 전처리 파일 이후에 판독하도록 위치된다. 즉, 판독은 상향식으로 수행되어서, 소프트웨어 성분의 기준 계층에서 가장 낮은 성분을 정의하는 제 1 파일이 판독된다(제 1 성분의 정의가 제 2 성분을 나타내면, 그 계층에서 제 1 성분이 더 높다고 한다). 따라서, 공통 파일의 제 1 엔카운터 확장(encountered expansion)만이 보유되어야 한다. 바람직하게는, 마킹 정보가 전처리 파일에 포함되어서 전처리 파일로 확장되는 데 사용되는 공통 파일과 확장되는 정보 자체 모드를 식별한다. 재생성 동안, 마킹 정보는 원본 파일용으로 생성된 파일에 있는 확장 정보 대신에 인스트럭션을 삽입하는 데 사용된다. 삽입 인스트럭션은 공통 파일 중 첫번째 파일이 전처리된 파일로 확장되는 공통 파일 중 첫번째 파일을 위해 재생성된 파일의 포함을 지시한다. 공통 파일 중 재생성된 파일은 선택된 전처리 파일의 마킹 정보에 의해 표시된 확장된 정보로부터 재생성된다. 따라서, 재생성된 파일은 원본 파일과 같은 방식으로 사용될 수 있다.
바람직하게는, 다수의 원본 파일이 나타내는 정보는 소프트웨어 성분의 구조의 정의이고, 선택된 파일은 소프트웨어 성분의 요소를 위해 구현 프로그램을 제공함으로써 정보를 정교하게 만든다(elaborate). 이 경우, 추가 공통 파일로부터 정보를 확장시키는 이전 인스트럭션인 공통 파일 중 제 1 파일로부터의 정보를 확장시키는 제 1 인스트럭션에 앞서서, 각각의 전처리 파일에 대해서 선택된 전처리 파일이 생성되는 원본 파일 중 하나가 포함되어 있는 지 검출되는 것이 바람직하며, 동일한 이전 인스트럭션의 사본은 공통 파일 중 첫번째 파일을 확장시키는 인스트럭션이 삽입된 각각의 재생성된 파일에서 생성되며, 이 같은 사본은 공통 파일 중 첫번째 파일을 확장시키는 인스트럭션에 앞서서 삽입된다.
이러한 본 발명의 목적 및 유익한 측면이 다음 도면을 사용해서 설명될 것이다.
도 1은 프로그램 파일을 처리하는 시스템을 도시하는 도면,
도 2는 정보 처리 구조를 도시하는 도면,
도 3은 파일 사이의 참조 관계를 도시하는 도면,
도 4는 데이터 구조를 도시하는 도면,
도 5는 정보 처리 구조를 도시하는 도면.
도 1은 파일을 처리하는 시스템을 도시한다. 이 시스템은 소스 및 헤더 파일을 저장하는 자기 디스크 또는 이러한 디스크의 조합과 같은 저장 장치(10), 프로세서(12), 프로세서 메모리(11), 타겟 프로그램 메모리(17) 및 타겟 프로세서(18)로 이루어진 타겟 컴퓨터(16) 및 생성된 기계 인스트럭션의 프로그램을 프로그램 메모리에 저장하는 장치(14)를 포함한다. 본 발명으로부터 벗어나지 않고, 타겟 프로세서(18)는 프로세서(12)가 될 수 있고, 타겟 프로그램 메모리(17)는 프로세서 메모리(11)가 될 수 있다.
프로세서(12)는 저장 장치(10)에 연결되어서 저장 장치(10)로부터 원본 소스 파일 및 원본 헤더 파일을 판독하고, 프로세서 메모리(11)에도 연결된다. 장치(14)는 프로세서(12)와 타겟 프로그램 메모리(17) 사이에 연결된다. 장치(14)는 기계 인스트럭션의 프로그램을 타겟 프로그램 메모리(17)로 기록하도록 배열될 수도 있으며, 타겟 컴퓨터가 집적 회로의 일부라면, 타겟 프로그램 메모리(17)를 프로그램으로 프로그래밍해서 만들도록 제조될 수 있다. 그러나, 프로세서(12)와 장치(14) 사이의 연결이 사실상 저장 장치(10) 또는 임의의 저장 장치(도시 생략)를 통해서 구현될 수 있다는 것을 이해할 것이다.
도 2는 처리 중의 정보 흐름을 도시하고 있다. 저장 장치(10)에 저장된 원본 소스 파일(20a-c)은 전처리기(22)에 인가된다. 예로서, 3개의 원본 소스 파일 (20a-c)이 도시되어 있지만, 임의의 수의 원본 소스 파일(20a-c)이 사용될 수 있다는 것을 이해할 것이다. 전처리기(22)는 예컨대, 각각의 원본 소스 파일(20a-c) 마다 프로세서(12) 상에서 반복적으로 구현되는 프로그램으로서 구현된다. 전처리기(22)는 전처리 동안 원본 헤더 파일(21)의 그룹으로부터의 파일을 사용해서, 각각의 원본 소스 파일(20a-c) 마다 전처리 파일(23a-c)을 생성한다.
전처리기는 전형적으로 인스트럭션 코드를 원본 소스 파일(20a-c)로부터 각각의 전처리 파일(23a-c)로 복제하고, 원본 소스 파일(20a-c)로부터의 특정 상태에 응답해서 원본 헤더 파일(21)로부터 전처리 파일(23a-c)로 삽입한다. 삽입된 정보는 정보가 유도되는 원본 헤더 파일(21)을 나타내도록 표시된다. 전처리기(22)에 의해 생성되는 전처리 파일(23a-c)은 예컨대 프로세서 메모리 혹은 저장 장치(10)에 저장된다.
표 1은 원본 소스 파일, 소스 헤더 파일 및 전처리 파일의 예를 도시하고 있으며, 여기서 포함 상태가 사용되어서 원본 헤더 파일로부터의 정보를 가진 원본 소스 파일을 확장시키고, 마킹 정보가 추가된다. 또한, 전처리 파일 위에는 소스 파일을 식별하는 마크가 추가된다.
마킹의 형태가 예로서 나타나 있으며, 표시된 원본 헤더 파일로부터 나온 임의의 종래의 형태의 마킹 정보가 사용될 수 있다는 것이 자명할 것이다.
원본 헤더 파일은 추가 원본 헤더 파일에 대한 포함 상태를 구비할 수 있다. 이 경우, 전처리기(22)는 이들 추가 원본 헤더 파일로부터의 정보를 전처리 파일(23a-c)로 확장하고, 대응하는 마킹 정보를 전처리 파일(23a-c)로 추가한다. 이들 추가 원본 헤더 파일이 포함 상태를 구비하고 있으면, 또 다른 원본 헤더 파일로부터의 정보는 전처리 파일(23a-c)에 포함된다.
원본 헤더 파일(21)은 조건부 상태를 포함할 수 있으며 예컨대, 변수 X가 미리 정의되어 있다면 프로세서(22)가 원본 헤더 파일(21)의 확장 부분을 스킵하게 하는 "#ifndef X"를 포함할 수 있다. 예컨대, 원본 헤더 파일(21)은 다음 상태를 포함한다.
....
#endif
변수 X의 명칭은 이 원본 헤더 파일로 특정된다. 이 경우, 원본 헤더 파일(21)에 대한 포함 상태가 변수 X가 미리 정의되었는 것과 엔카운터한다면, 원본 헤더 파일의 "ifndef"와 "endif" 사이의 부분은 전처리 파일(23a-c)로 확장되지 않는다.
통합 처리 단계(24a)는 전처리된 파일(23a-c)의 조합을 처리한다. 통합 처리 단계(24a)는 컴퓨터 구현 프로그램으로서 구현된다. 통합 처리 단계(24a)는 전처리 파일(23a-c)로부터의 정보를 수정한다. 이는 원본 소스 파일(20a-c)로부터의 정보 및/또는 원본 헤더 파일(21)로부터의 정보를 포함할 수 있다.
본 발명은 통합 처리 단계(24a)가 전처리 파일(23a-c)로부터의 정보에 적용하는 수정에 타입에 의존하지 않는다. 전형적인 수정은 전처리 파일의 공통 재설계이며, 이는 원본 헤더 파일로부터의 공통 클래스 정의에 대한 변화 및 대응하는 수정된 클래스의 멤버를 구현하거나 클래스 정의를 사용하는 원본 소스 파일(20a-c)로부터의 인스트럭션의 수정을 포함한다. 이는 예컨대, 병렬 프로세서 사이의 데이터 전송을 위한 인스트럭션을 삽입함으로써, 소스 파일이 원래 설계된 타입이 아닌 다른 타입의 타겟 컴퓨터(16)에서 수행하기에 적합한 원본 소스 파일(20a-c)로부터 프로그램을 만드는 데 적용될 수 있다.
개별 단계(24b)는 통합 처리 단계(24a)의 결과를 생성된 소스 파일(25a-c) 및 생성된 헤더 파일(26a-c)로 전송한다. 생성된 소스 파일(25a-c) 및 생성된 헤더 파일(26a-c)은 이들이 원본 소스 파일(20a-c) 및 원본 헤더 파일(21) 각각인 것처럼 사용될 수 있다. 즉, 이들은 전처리기(22)에 적용되어서 추가 전처리 파일(27a-c)을 생성하는 데 사용될 수 있다.
추가 전처리 파일(27a-c)은 컴파일러(28)에 제공될 수 있다. 컴파일러(28)는 각각의 추가 전처리 파일(27a-c) 마다 반복 수행되는 컴퓨터(12)에서 수행되는 프로그램으로서 구현될 수 있다. 컴파일러(28)는 객체 파일(29a-c)을 생성하고, 이는 타겟 프로세서(18)의 기계 인스트럭션의 수행 가능 프로그램(210)을 생성하기 위해서 링커(200)에 의해 사용된다. 링커는 예컨대, 컴퓨터(12)에서 수행되는 프로그램으로서 구현될 수 있다.
개별 단계(24b)는 수정 이후에 전처리된 파일(23a-c)로부터 나온 코드를 사용해서 소스 파일(25a-c)의 생성을 수행한다. 코드 중 전처리 파일의 최상위 마커 정보의 위치에 대응하는 위치에서, 개별 단계(24b)는 포함 상태를 생성된 소스 파일(25a-c)에 삽입하고, 여기서 포함 상태는 마커 정보에 식별된 헤더 파일(21)의 생성된 버전을 나타낸다. 개별 단계(24b)는 생성된 소스 파일(25a-c)에서 이러한 마커 정보에 의해 표시되며, 헤더 파일(21)로부터 확장된 정보를 삽입하지 않는다. 개별 단계(24b)는 확장된 정보 내의 네스트된 마커 정보(nested marker information)를 포함 상태를 삽입하는 데 사용하지 않는다. 따라서, 최상위 마커 정보만이(다른 마킹된 정보의 일부가 아닌) 포함 상태를 삽입하는 데 사용된다. 표 2는 소스 파일의 재생성을 나타낸다.
개별 단계(24b)는 전처리 파일(23a-c)의 정보로부터 헤더 파일(26a-c)도 생성한다. 일반적으로 다른 전처리 파일(23a-c)은 각각 같은 헤더 파일(21)로부터 확장을 포함할 수 있다. 그럼에도 불구하고, 다른 전처리 파일(23a-c)의 확장은 서로 다를 수 있으며, 이는 전처리기(22)가 조건부 포함 상태에 미치는 영향 때문이다. 이는 전처리 파일(23a-c) 중 일부만이 헤더 파일(26a-c)을 생성하기에 적합하다는 것을 의미한다. 다른 전처리 파일(23a-c)은 불충분하게 완료된다.
도 3은 전처리 파일(23a-c)의 불완전성을 나타낸다. 제 1 소스 파일(S1)에서, 제 1 헤더 파일(H1)을 나타내는 포함 상태가 포함된다. 제 1 헤더 파일(H1)은 기본 헤더 파일(H0)을 나타내는 포함 상태를 포함한다. 제 2 소스 파일(S2)은 소스 헤더 파일(H2)을 나타내는 포함 상태에 앞서서 제 1 헤더 파일(H1)을 나타내는 포함 상태를 포함한다. 제 2 헤더 파일(H1)은 기본 헤더 파일(H0)을 나타내는 포함 상태도 포함한다. 제 1 소스 파일(S1)이 전처리될 때, 제 1 헤더 파일(H1)은 H0의 확장을 포함하도록 완전히 확장된다. 그러나, 제 2 소스 파일(S2)이 전처리될 때, 제 1 헤더 파일(H1)은 완전히 확장되지 않으며, 이는 제 2 헤더 파일(H2)의 확장 동안 이미 확장되었기 때문에 H0에 대한 참조가 확장되지 않기 때문이다. 그 결과 제 2 소스 파일(S2)로부터 유도된 전처리 파일로부터의 헤더 파일(H1')의 생성은 충분하게 생성된 헤더 파일(H1')을 생성하지 낳을 것이다.
헤더 파일(26a-c)을 생성하기 위해 적절하게 전처리된 파일을 선택하는 것은 전처리 파일(23a-c)의 소프트웨어 성분의 존재를 분석하는 것을 포함한다. 이러한 분석을 위해서 전처리 파일(23a-c)로부터 나온 데이터 구조가 사용된다. 이 데이터 구조는 소프트웨어 성분, 전처리 파일(23a-c) 및 전처리 파일(23a-d)에서 식별된 헤더 파일의 신원(identification)을 개체로서 사용한다. 일 실시예에서, 소프트웨어 성분은 C++ 클래스 정의이다. 데이터 구조는 소프트웨어 식별자와 헤더 파일 사이의 "defined_in"의 순환 및 소프트웨어 성분의 식별자와 전처리 파일(23a-d) 사이의 "implemented_in"의 순환을 나타낸다.
헤더 파일의 생성이 표 3의 소스 파일 메인, 소스 F1, 소스 F2의 예를 사용해서 설명될 것이다.
소스 파일은 헤더 파일 F1, F2 및 sys를 포함한다. 예컨대, 헤더 파일 F1이 라이브러리 헤더 파일 L 및 헤더 파일 F0의 포함 상태를 포함한다고 가정한다(소스 파일에는 sys, L 및 F0가 제공되지 않는다). 또한, 헤더 파일 F2이 헤더 파일 L, F0 및 F1의 포함 상태를 포함하는 것으로 가정한다. 헤더 파일 F0은 헤더 파일 L 및 sys의 포함 상태를 포함한다. 헤더 파일 L은 헤더 파일 sys의 포함 상태를 포함한다.
이로써 표 4에 따른 전처리 파일(23a-c)이 나온다.
전처리 파일은 네스트 마크 정보를 포함한다는 점에 주의한다(제 1 마크에는 제 1 마크에 대응하는 종료 이전에 제 2 마크가 후속한다). 같은 헤더 파일(F1 이라 함)의 확장은 다른 전처리 파일과는 상이하다는 점에 주의해야 할 것이며, 이는 일부 예에서 네스트된 헤더 파일이 미리 전처리되었다면 전처리되지 않기 때문이다.
통합 처리 단계(24a) 또는 개별 단계(24b)는 전처리 파일로부터 판독한 정보를 사용해서 데이터 구조를 만든다. 파일은 그 자체가 전처리 파일의 식별자를 정의한다. 마크 정보가 새로운 헤더 파일을 나타낼 때마다. 헤더 파일 식별자가 추가된다. 소프트웨어 성분은 전처리 정보를 파스해서(parse) 예컨대, 클래스 정의를 검출함으로써 검출된다. 이러한 클래스 정의가 전처리 파일에서 클래스 정의가 전처리 파일에 엔카운터하면, 소프트웨어 구성 요소 신원이 이에 대해서 생성되며, defined_in 관계는 발생할 것이라고 정의가 마킹했던 헤더 파일에 추가된다. 유사하게, 전처리 파일에서 클래스 멤버의 구현이 검출되고 대응하는 implemented_in 관계가 기록되지 않았다면, 그 때마다 전처리 파일이 예컨대 클래스의 멤버 함수 구현을 위해 파스되며, implemented_in 관계는 추가된다. 신원 및 이들 신원 사이의 관계가 임의의 종래의 방식으로, 예컨대 헤더 파일과 같은 개체, 전처리 파일 및 소프트웨어 성분의 표 및 관련된 이러한 표의 쌍을 위한 개체와 관련된 표를 사용해서 기록될 수 있다.
개별 단계(24b)는 데이터 구조로부터의 정보를 가지고 헤더 파일(26a-c)을 생성한다. 각각의 소프트웨어 성분에 대해서, 개별 단계는 소프트웨어 성분과 defined_in 관계인 헤더 파일 및 소프트웨어 성분과 implemented_in 관계인 전처리 파일을 측정한다. 후속해서 헤더 파일은 implemented_in관계인 전처리 파일로부터 생성된다.
이러한 과정은 특정 헤더 파일(21)에 정의된 소프트웨어 성분의 구현을 포함하는 소스 파일(20a-c)이 포함 상태가 완전하게 확장되는 방식으로 특정 헤더 파일의 포함 상태를 포함하는 것으로 가정한다. 이는 예컨대 특정 헤더 파일의 포함 상태가 프로그램 파일의 제 1 포함 상태인 경우로 보장된다(특정 헤더 파일에 필요한 임의의 다른 헤더 파일은 특정 헤더 파일 자체에 포함된다). 프로그램 파일이 설계 스타일을 사용해서 개발되어서 그 요구 사항을 만족시킬 때, 다른 방법은 필요없다(이 경우, refer_to 관계는 필요없다).
이러한 스타일이 설명되지 않았다면, 개별 단계(24b)의 실시예는 바람직하게는 마킹 정보로부터 이들 마킹된 최상위 레벨 포함 상태를 추출하도록 구성되는 것이 바람직하며, 이 포함 상태는 특정 헤더 파일을 생성하는 데 사용되는 전처리 파일의 특정 헤더 파일의 포함 상태에 앞선다. 개별 단계(24b)는 특정 헤더 파일의 포함 상태를 포함하는 각각의 생성된 소스 파일에서 추출된 포함 상태를 그 헤더 파일에 앞서서 삽입한다. 따라서, 특정 헤더 파일이 포함될 때마다 같은 환경이 생성된다.
표 5는 이러한 기술의 결과의 예를 나타낸다.
이 실시예에서, "a"를 나타내는 포함 상태는 헤더 파일 "b.h"의 포함 상태 이전에 소스 파일 b에 나타난다. 헤더 파일 c은 헤더 파일 "b.h"에 대한 포함 상태를 포함하지만, 파일 "a"에 대한 포함 상태는 포함하지 않는다. 파일 a의 포함 상태는 생성된 헤더 파일 "b1.h"의 포함 상태 이전에 개별 단계(24b)가 포함 상태를 생성된 "b"의 소스와 생성된 헤더 파일 "c" 모두의 "a"에 삽입하게 한다. 즉, 추가 포함 상태가 헤더 파일 "c"에 생성된다. 이론상 개별 단계(24b)는 이러한 포함 상태를 생성된 헤더 파일 "b1.h"의 포함 상태가 삽입된 모든 파일에 삽입한다. 선택적으로, 개별 단계(24b)는 파일 "a"의 포함 상태가 이미 존재하는 파일에 추가 포함 상태를 삽입하는 것을 억제할 수 있다.
다른 실시예에서, 통합 처리 단계(24a)는 마커 정보가 전처리 파일(23a-c)의 일부가 다른 전처리 파일(23a-c)의 일부로서 이미 판독된 헤더 파일의 포함 상태로부터 나온다는 것을 포함하면, 이 전처리 파일(23a-c)의 일부를 스킵하도록 배치된다. 스킵함으로써, 스킵된 부분이 수정되지 않으며 통합 처리에 사용되지 않는다는 것을 의미한다. 일반적으로 통합 처리 동안 메모리(11)에서 스킵된 부분에 의해 취해서 메모리 공간은(존재하는 경우), 이들 부분의 카피가 혹은 이들 부분으로부터 유도된 정보가 메모리(11)에 유지되도록 처리 동안 재사용된다. 통합 처리 단계(24a)가 전처리 파일(23a-c)을 판독하고, 마커 정보를 엔카운터할 때, 통합 처리 단계(24a)는 마커 정보에 식별된 헤더 파일을 결정하고, 마커 정보에 이미 엔카운터된 헤더 파일 신원의 리스트와 헤더 신원을 비교해서 신원이 이미 엔카운터된다면 스킵한다.
일 실시예에서, 통합 처리 단계는 제 1 파서 및 제 2 파서(paser)를 포함한다(예컨대 다른 프로그램 부분으로서 구현됨). 파서는 그 자체가 알려져 있으며, 전처리 파일을 판독하고, 이들 파일의 신택스 구조를 측정하며, 신택스 위치에 따라서 정보를 추출한다. 제 1 파서는 마킹된 정보의 시작과 끝 사이의 정보의 세부 사항을 분석한 세부 문법(detailed grammar)을 사용해서 파스하도록 배치된다. 제 2 파서는 파기된 구조화되지 않은 블록으로서 마킹된 정보의 시작과 끝 사이의 모든 정보를 추적하는 세부 문법을 더 적게 파스하도록 배치된다.
통합 처리 단계(24a)가 헤더 파일로부터의 정보의 반복을 스킵하는 이러한 실시예를 사용할 때, 각각의 헤더 파일로부터의 제 1 엔카운터 정보가 완료하는 것을 보장해야 한다. 생성된 헤더 파일이 완전하다는 것을 보장해야 한다. 이를 위해서, 통합 처리 단계(24a)로 전처리 파일을 처리하는 순서는 헤더 파일을 생성하는 데 사용되는 각각의 전처리 파일(위에 설명된 바와 같이)이 헤더 파일을 포함하는 임의의 다른 전처리 파일 이전에 처리되도록 배열된다.
바람직하게는, 통합 처리 단계(24a)에서 재순서화 단계가 사용된다. 재순서화 단계는 우선 전처리 파일(23a-c)을 임의의 순서로 판독하고, 전처리 파일의 처리 순서를 선택한다. 후속해서 두번째로 통합 처리 단계(24a)는 선택된 순서에서 전처리 파일을 판독한다. 재순서화를 위해서, 소프트웨어 성분 사이의 추가 "refer_to"에 관한 정보가 수집되는 것이 바람직하다. 제 1 소프트웨어 성분이 제 2 성분을 사용하는 경우에, 제 2 소프트웨어 성분을 나타낸다고 한다(예컨대, 제 1 성분이 제 2 성분에 의해 정의된 제 2 클래스의 변수를 포함하는 제 1 클래스인 경우).
도 4는 표 3 및 4의 예의 전처리 파일로부터 유도된 데이터 구조의 개체 및 관계의 예를 도시하고 있다. 3개의 소프트웨어 성분(F2, F1 및 F0)이 정의되는 것으로 가정한다(사각형 박스로 도시됨). 소프트웨어 성분 사이의 화살표가 refer_to 관계를 도시한다. 전처리된 파일(F1 및 F2)은 소프트웨어 성분으로 연결되는 원으로 도시되어 있으며, 이들 중 이들 전처리 파일은 구현을 포함한다. 마킹된 헤더 파일이 타원형으로 도시되어 있으며, 이는 헤더 파일이 정의를 포함하는 소프트웨어 성분으로 연결되어 있다. 소프트웨어 성분(F2, F1 및 F0)에 연결된 전처리 파일 및 헤더 파일이 도시된다. 따라서, 전처리 파일 메인은 예로 도시되어 있지 않다.
재순서화 단계는 도 4와 관련해서 설명되는 바와 같은 데이터 구조를 만든다. 소스 파일의 유용한 순서를 결정하기 위해서, 재순서화 단계는 소프트웨어 성분을 나타내는 순서 리스트를 효율적으로 사용한다. 처음에, 리스트가 비워진다. 재순서화 단계는 리스트에 아직 올라 있지 않은 "프리" 소프트웨어 성분을 반복해서 탐색하며, 리스트에 아직 올라 있지 않은 임의의 다른 소프트웨어 성분에 의해서는 간주되지 않는다. 재순서화 단계는 프리 소프트웨어 성분을 리스트에 추가하고, 모든 소프트웨어 성분이 리스트에 입력될 때까지 다음 프리 소프트웨어 성분에 대한 탐색을 반복한다. 각각의 소프트웨어 성분에서, 관련 전처리 파일(23a-d)이 소프트웨어 성분과 implemented-in 관계에 있다면 관련이 있다고 한다.
통합 처리 단계(24a)가 전처리 파일(23a-d)을 판독할 때, 두번째로 전처리 파일(23a-c)이 리스트의 관련된 소프트웨어 성분의 순서로 판독된다. 소프트웨어 성분과 관련되는 것으로 선택되지 않았지만, 특정 소프트웨어 성분을 구현하는 전처리 파일은 언제든지 판독될 수 있지만, 특정 소프트웨어 성분이 나타내는 다른 소프트웨어 성분을 구현하는 임의의 전처리 파일의 이전은 아니다.
도 4의 예에서, 예컨대 재순서화된 시퀀스에서 공통의 처리 단계(24a)는 먼저 원본 파일(F2)에 대해 전처리된 파일을 판독하고, 후속해서 원본 파일(F1)에 대해서 전처리된 파일을 판독한다. 임의의 특정 성분을 구현하지 않는 것으로 나타난 메인과 같은 다른 파일이 후속해서 판독된다.
바람직하게는 설명된 바와 같이, 생성된 버전이 만들어지는 파일에 대한 원본 포함 상태에 앞선 임의의 선행 포함 상태(예컨대, F0까지)는 포함 상태가 원본 포함 상태에 대응하는 모든 생성된 파일로 자동적으로 카피된다(예컨대, F1 및 F2가 발생할 때까지).
다른 방안으로, 또는 이에 더해서, 통합 소스 처리 단계(24a)는 전처리를 구현했다는 것이 나타나지 않은 이들 소프트웨어 성분에 대해서 보조 더미 구현 소스 파일을 생성할 수 있다(예컨대 F0). 더미 구현 소스 파일은 전처리기(22)에 인가되며, 결과로 나온 전처리 파일은 통합 소스 처리 단계가 선택된 순서로 전처리 파일을 판독할 때 제 2 패스에 사용된다. 더미 구현 소스 파일(예컨대, F0의 소스 파일)은 소프트웨어 성분이 관련되었다고 정의하는 헤더 파일의 포함 상태를 거의 포함하지 않는다. 통합 처리 단계(24b)에 의한 제 2 패스 동안의 판독 순서 중 더미 구현 소스 파일의 위치는 임의의 생성 소스 파일에 대해서와 같이 결정된다. 따라서, 헤더 파일이 제 2 패스에서 처음 판독될 때 관련 헤더 파일의 완전한 확장이 전처리 파일로부터 확실하게 판독된다.
통합 전처리 단계(24a)가 판독 처리 마다 2개의 패스에 적용되는 것이, 즉 제 1 패스가 제 2 패스의 판독 순서를 선택하는 것이 바람직하지만, 선택된 순서는 재순서화 없이 다른 제 2 패스에 대해서 수회 재사용될 수 있다는 것을 이해할 것이다. 이는 예컨대, 공통 처리 단계(24a)의 다음 수행, 예컨대 소스 파일(20a-c)이 변화된 이후에 적용되는 수행을 위해 선택된 판독 순서를 나타내는 메이크 파일을 생성함으로써 구현될 수 있다.
또한, 전처리 파일의 판독 순서의 재순서화 및 헤더 파일의 제 2 엔카운터 확장만을 보유하는 것이 바람직한 실시예이지만, 보유될 확장을 선택하는 다른 가능한 방법이 존재한다는 것을 이해할 것이다. 예컨대, 확장된 정보가 보유될지 여부를 나타내는 헤더 파일로부터의 확장된 정보의 지시 정보를 가진 수정된 전처리 파일이 생성된다. 후속해서, 수정된 전처리 파일은 통합 처리 단계(24a)의 다음 수행에서 판독되며, 헤더 파일로부터의 지시 정보만이 메모리(11)에 보유된다. 다른 예에서와 같이, 헤더 파일의 선택된 전처리 파일과 같은 신원이 2개의 수행 사이의 통합 처리 단계(24a)에서 보유될 수 있으며, 두번째 수행에서 식별된 전처리 파일로부터의 헤더 파일로부터의 정보만이 메모리(11)에 보유된다.
또한, 판독 순서를 선택하기 위해 사용되는 데이터 구조가 재순서화가 아닌 다른 목적에 사용될 수 있다는 것을 이해할 것이다. 사실, 관련 데이터 구조는 통합 처리 단계(24a)에 의한 처리의 부산물이 될 수 있다.
본 발명이 C++ 소스 및 헤더 파일에 대해서 설명되었지만, 본 발명이 헤더 파일과 같은 공통 파일로부터의 정보가 전처리된 파일로 확장되고, 원본 파일의 버전 및 공통 파일이 전처리 파일로부터 생성되도록, 소스 파일과 같은 복수의 원본 파일이 전처리되는 임의의 과정에 적용될 수 있다는 것을 이해할 것이다.
도 5는 모든 파일이 재사용을 위해 생성되지 않는 정보 흐름을 도시하고 있다. 예로서, 소스 파일(20c) 중 하나가 생성된 파일(25c:도시 생략) 대신 사용되는 것으로 도시되어 있고, 헤더 파일(21) 중 하나가 생성된 헤더 파일(26c:도시 생략) 대신에 사용되는 것으로 도시되어 있다. 헤더 파일의 선택은 통합 처리 단계(24a)에 제공되는 인스트럭션에 기초해서 이루어질 수 있다. 인스트럭션은 예컨대 특정 클래스를 식별할 수 있으며, 이 클래스의 사용은 전처리 파일(23a-c)의 클래스로부터 수정되어야 한다. 이 경우, 통합 처리 단계(24a)는 refer_to 관계를 사용해서 소프트웨어 성분 중 어느 것이 수정될 지 결정하고(자체가 수정되거나 수정된 성분을 간접적으로 혹은 직접적으로 나타낸다), 별개 단계(24b)에 지시해서 수정된 파일에 대해서만 소스 파일(25a, b) 및 헤더 파일(26a, b)을 생성한다. 포함 상태는 헤더 파일의 어떤 새로운 버전도 생성되지 않을 때 수정되지 않은 헤더 파일(의 사본)을 기준으로 생성된다.
설명된 바와 같이, 본 발명은 주로 복수의 전처리 파일에 조화된 수정을 자동으로 수행하는 통합 처리 단계(24a)와 함께 사용되지만, 본 발명이 통합 처리 단계가 전처리 파일을 사람이 수정하는 것을 가능하게 하는 경우에 적용될 수 있다는 것이 이해될 것이다.
Claims (17)
- 기계를 이용한 파일 처리 방법에 있어서,복수의 원본 파일(original files)을 제공하는 단계와,상기 복수의 원본 파일이 나타내는(refer to) 정보를 포함하는 하나 이상의 공통 파일을 제공하는 단계와,상기 원본 파일을 전처리해서(preprocess) 각각의 전처리 파일을 생성하는 단계 - 상기 전처리 단계는 상기 공통 파일 중 첫번째 파일로부터 상기 정보를 이용해서 상기 복수의 원본 파일을 확장하는 단계를 포함함 - 와,통합 처리 단계를 적용해서 상기 전처리 파일로부터의 정보를 조화해서(coordinated) 변화시키는 단계와,상기 선택된 파일이 상기 공통 파일 중 첫번째 파일로부터의 정보를 정교하게 만드는(elaborate) 것을 검출한 것에 기초해서 상기 처리된 파일 중 하나를 선택하는 단계와,상기 통합 처리 단계에 의해 영향을 받는 상기 공통 파일의 상기 원본 파일 및 상기 첫번째 파일에 대한 재생성된 파일을 재생성하는 단계 - 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일을 재생성하는 단계는 상기 선택된 전처리 파일로부터의 정보를 사용해서, 상기 선택된 전처리 파일의 정보가 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일에 얼마나 포함될지를 제어하는 방식으로 제어됨 -를 포함하는 기계를 이용한 파일 처리 방법.
- 제 1 항에 있어서,상기 공통 파일 중 첫번째 파일에 대한 재생성된 파일로부터의 정보를 사용해서 상기 원본 파일의 상기 재생성된 파일을 제 1 개별 처리하고, 후속해서 상기 원본 파일에 대한 상기 재생성된 파일로부터 유도된 정보를 연결시킴으로써 기계 인스트럭션의 프로그램을 연결시키는 단계를 더 포함하는기계를 이용한 파일 처리 방법.
- 제 2 항에 있어서,상기 통합 처리의 영향을 받는 원본 파일 및 공통 파일에 대한 재생성된 파일만을 선택적으로 재생성하는 단계와,상기 개별 처리 단계에서 영향을 받지 않는 원본 파일 및 공통 파일을 사용하는 단계를 포함하는기계를 이용한 파일 처리 방법.
- 제 1 항에 있어서,상기 복수의 원본 파일이 나타내는 상기 정보는 소프트웨어 성분의 구조의 정의이며,상기 선택된 파일은 상기 소프트웨어 성분의 요소에 대한 구현 프로그램을 제공함으로써 정보를 정교하게 만드는기계를 이용한 파일 처리 방법.
- 제 1 항에 있어서,상기 전처리 파일을 제 1 판독해서 상기 선택 단계를 수행하는 단계와,상기 전처리 파일을 제 2 판독하는 단계를 포함하되,상기 공통 파일의 첫번째 파일의 확장된 정보 중 상기 선택된 전처리 파일로부터 확장된 정보만이 통합 처리 적용 동안 사용하기 위해 컴퓨터 메모리에 유지되는기계를 이용한 파일 처리 방법.
- 제 5 항에 있어서,상기 선택 단계는상기 전처리 파일의 소프트웨어 성분의 구현을 검출하는 단계와,특정 전처리 파일이 소프트웨어 성분의 구현을 포함하는 경우, 상기 메모리 내의 제 1 공통 파일로부터의 정보를 유지하기 위해서 상기 특정 전처리 파일을 선택하는 단계를 포함하는 기계를 이용한 파일 처리 방법.
- 제 6 항에 있어서,상기 제 2 판독 동안 상기 전처리 파일의 판독 순서는 상기 제 1 판독 시에 미리 선택되고,상기 순서에서 상기 특정 전처리 파일은, 상기 특정 전처리 파일이 하나 이상의 추가 소프트웨어 성분을 나타내는 소프트웨어 성분의 구현을 포함하는 경우에, 상기 하나 이상의 추가 소프트웨어 성분 모두의 구현을 포함하는 전처리 파일 또는 파일들 이후에 상기 특정 전처리 파일이 상기 판독 순서에 위치되도록 위치가 정해지는기계를 이용한 파일 처리 방법.
- 제 7 항에 있어서,상기 전처리 파일 구현 단계가 발견되지 않은 각각의 소프트웨어 성분 각각에 대해서 더미 파일을 생성하는 단계와,상기 제 2 판독의 일부로서 상기 더미 파일을 판독하는 단계를 포함하되,상기 더미 파일 생성 단계는 각각의 특정 더미 파일에 인스트럭션을 삽입해서 상기 더미 파일이 생성되는 상기 소프트웨어 성분을 정의하는 공통 파일을 포함하게 하는 단계와 상기 더미 파일을 전처리하거나, 상기 삽입 및 전처리 대신에 상기 더미 파일의 상기 공통 파일의 확장을 삽입하는 단계를 더 포함하는기계를 이용한 파일 처리 방법.
- 제 1 항에 있어서,상기 전처리 단계는 정보가 상기 전처리 파일로 확장되는 상기 공통 파일의 상기 제 1 파일 및 확장된 정보를 나타내도록 상기 전처리 파일에 마킹 정보를 포함시키는 단계를 포함하고,상기 재생성 단계는 상기 원본 파일에 대한 상기 재생성된 파일의 상기 확장된 정보 대신에 상기 마킹 정보를 사용해서 인스트럭션을 삽입하는 단계를 포함하며 - 상기 인스트럭션은 상기 공통 파일의 첫번째 파일이 상기 전처리 파일로 확장되는 경우 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일의 포함을 지시함 - ,상기 공통 파일 중 첫번째 파일의 상기 재생성된 파일은 상기 선택된 전처리 파일의 상기 마킹 정보에 의해서 확장된 정보로부터 생성되는기계를 이용한 파일 처리 방법.
- 제 9 항에 있어서,상기 복수의 원본 파일이 나타내는 상기 정보는 소프트웨어 성분의 구조의 정의이고,상기 선택된 파일은 상기 소프트웨어 성분의 요소에 대한 구현 프로그램을 제공함으로써 상기 정보를 정교하게 만들며,상기 방법은각각의 전처리 파일에 대해서, 상기 공통 파일 중 첫번째 파일로부터 상기 정보를 확장하는 제 1 인스트럭션에 앞서서, 상기 원본 파일 중 상기 선택된 전처리 파일이 생성된 파일이 추가 공통 파일로부터 정보를 확장하는 선행 인스트럭션을 포함하는지 여부를 검출하는 단계와,상기 공통 파일 중 상기 첫번째 파일을 확장하는 인스트럭션이 삽입되는 경우 각각의 생성된 파일의 상기 선행 인스트럭션의 동일한 사본을 생성하는 단계 - 상기 동일 사본은 상기 공통 파일 중 첫번째 파일을 확장하는 상기 인스트럭션에 선행해서 삽입됨 -를 포함하는 기계를 이용한 파일 처리 방법.
- 제 1 항 내지 제 10 항 중 어느 한 항에 따른 방법의 각각의 단계를 수행하는 기계 인스트럭션을 포함하는 컴퓨터 프로그램 제품.
- 복수의 원본 파일 및 상기 복수의 원본 파일이 나타내는 정보를 포함하는 하나 이상의 공통 파일을 저장하는 저장 시스템과,처리 시스템을 포함하는파일을 처리하도록 프로그래밍된 기계에 있어서,상기 처리 시스템은상기 원본 파일을 전처리해서 각각의 전처리 파일을 생성하고 - 상기 전처리는 상기 공통 파일 중 첫번째 파일로부터의 상기 정보를 이용해서 상기 복수의 원본 파일을 확장하는 것을 포함함 - 와,통합 처리 단계를 적용해서 상기 전처리 파일로부터의 정보를 조화해서 변화시키며,상기 선택된 파일이 상기 공통 파일 중 첫번째 파일로부터의 정보를 정교하게 만드는(elaborate) 것을 검출한 것에 기초해서 상기 처리된 파일 중 하나를 선택하고,상기 통합 처리 단계에 의해 영향을 받는 상기 공통 파일의 상기 원본 파일 및 상기 첫번째 파일에 대한 재생성된 파일을 재생성하도록 - 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일을 재생성하는 것은 상기 선택된 전처리 파일로부터의 정보를 사용해서, 상기 선택된 전처리 파일의 정보가 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일에 얼마나 포함될지를 제어하는 방식으로 제어됨 - 프로그래밍되는파일을 처리하도록 프로그래밍된 기계.
- 제 12 항에 있어서,상기 통합 처리 단계를 적용하기 위한 상기 전처리 파일로부터의 정보를 저장하는 메모리를 더 포함하되,상기 기계는상기 전처리 파일을 제 1 판독해서 상기 선택을 수행하고,후속해서 상기 통합 처리 단계를 위해 상기 전처리 파일을 판독하도록 배치되며,상기 공통 파일의 첫번째 파일의 확장된 정보 중 상기 선택된 전처리 파일로부터 확장된 정보만이 통합 처리 적용 동안 사용하기 위해 상기 메모리에 유지되는파일을 처리하도록 프로그래밍된 기계.
- 제 13 항에 있어서,상기 선택은상기 전처리 파일의 소프트웨어 성분의 구현을 검출하고,특정 전처리 파일이 소프트웨어 성분의 구현을 포함하는 경우, 상기 메모리 내의 제 1 공통 파일로부터의 정보를 유지하기 위해서 상기 특정 전처리 파일을 선 택하는 것을 포함하는파일을 처리하도록 프로그래밍된 기계.
- 제 14 항에 있어서,상기 후속 판독 동안 상기 전처리 파일의 판독 순서는 상기 제 1 판독 시에 미리 선택되고,상기 순서에서 상기 특정 전처리 파일은, 상기 특정 전처리 파일이 하나 이상의 추가 소프트웨어 성분을 나타내는 소프트웨어 성분의 구현을 포함하는 경우에, 상기 하나 이상의 추가 소프트웨어 성분 모두의 구현을 포함하는 전처리 파일 또는 파일들 이후에 상기 특정 전처리 파일이 상기 판독 순서에 위치되도록 위치가 정해지는파일을 처리하도록 프로그래밍된 기계.
- 제 12 항에 있어서,상기 전처리는 정보가 상기 전처리 파일로 확장되는 상기 공통 파일의 상기 제 1 파일 및 확장된 정보를 나타내도록 상기 전처리 파일에 마킹 정보를 포함시키는 것을 포함하고,상기 재생성은 상기 원본 파일에 대한 상기 재생성된 파일의 상기 확장된 정 보 대신에 상기 마킹 정보를 사용해서 인스트럭션을 삽입하는 것을 포함하며 - 상기 인스트럭션은 상기 공통 파일의 첫번째 파일이 상기 전처리 파일로 확장되는 경우 상기 공통 파일 중 첫번째 파일에 대한 상기 재생성된 파일의 포함을 지시함 - ,상기 공통 파일 중 첫번째 파일의 상기 재생성된 파일은 상기 선택된 전처리 파일의 상기 마킹 정보에 의해서 확장된 정보로부터 생성되는파일을 처리하도록 프로그래밍된 기계.
- 제 16 항에 있어서,상기 복수의 원본 파일이 나타내는 상기 정보는 소프트웨어 성분의 구조의 정의이고,상기 선택된 파일은 상기 소프트웨어 성분의 요소에 대한 구현 프로그램을 제공함으로써 상기 정보를 정교하게 만들며,상기 처리 시스템은각각의 전처리 파일에 대해서, 상기 공통 파일 중 첫번째 파일로부터 상기 정보를 확장하는 제 1 인스트럭션에 앞서서, 상기 원본 파일 중 상기 선택된 전처리 파일이 생성된 파일이 추가 공통 파일로부터 정보를 확장하는 선행 인스트럭션을 포함하는지 여부를 검출하고,상기 공통 파일 중 상기 첫번째 파일을 확장하는 인스트럭션이 삽입되는 경 우 각각의 생성된 파일의 상기 선행 인스트럭션의 동일한 사본을 생성하도록 배열되는 - 상기 동일 사본은 상기 공통 파일 중 첫번째 파일을 확장하는 상기 인스트럭션에 선행해서 삽입됨 -파일을 처리하도록 프로그래밍된 기계.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP03101032 | 2003-04-16 | ||
EP03101032.5 | 2003-04-16 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20060009843A true KR20060009843A (ko) | 2006-02-01 |
Family
ID=33185933
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020057019534A KR20060009843A (ko) | 2003-04-16 | 2004-04-13 | 기계를 이용한 파일 처리 방법, 컴퓨터 프로그램 제품 및파일을 처리하도록 프로그래밍된 기계 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7689975B2 (ko) |
EP (1) | EP1627300A2 (ko) |
JP (1) | JP2006523887A (ko) |
KR (1) | KR20060009843A (ko) |
CN (1) | CN100437476C (ko) |
WO (1) | WO2004092953A2 (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7523450B2 (en) * | 2004-11-15 | 2009-04-21 | International Business Machines Corporation | Apparatus, system, and method for identifying fixed memory address errors in source code at build time |
EP2023499A4 (en) * | 2006-05-30 | 2011-04-20 | Murata Manufacturing Co | INFORMATION TERMINAL |
KR20080045545A (ko) * | 2006-11-20 | 2008-05-23 | 삼성전자주식회사 | 조건부 영역을 전처리하는 방법 |
KR101156227B1 (ko) * | 2010-11-22 | 2012-06-18 | 주식회사 파수닷컴 | 전처리가 수행된 파일을 실행하기 위한 파일 처리장치 및 그 방법을 컴퓨터에서 실행시키기 위한 기록매체 |
CN102012816B (zh) * | 2010-11-30 | 2014-06-11 | 深圳创维-Rgb电子有限公司 | 一种生成ide工程文件和解决方案文件的方法与装置 |
US8464234B2 (en) * | 2011-10-24 | 2013-06-11 | Google Inc. | Pre-parsed headers for compilation |
JP6759851B2 (ja) * | 2016-08-22 | 2020-09-23 | 富士通株式会社 | プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム |
US10732944B1 (en) * | 2019-05-14 | 2020-08-04 | Baidu Usa Llc | Generic verification approach for Protobuf based projects |
CN113391817B (zh) * | 2021-06-16 | 2022-08-26 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4916610A (en) * | 1988-10-05 | 1990-04-10 | Racal Data Communications Inc. | Multilanguage software integration through preprocessing |
JP3190773B2 (ja) * | 1993-09-30 | 2001-07-23 | 日本電気株式会社 | 言語処理プログラムのコンパイル処理方法 |
US5692196A (en) * | 1994-08-26 | 1997-11-25 | Silicon Graphics, Inc. | System and method for conditionally compiling a software compilation unit |
US6006031A (en) * | 1994-10-07 | 1999-12-21 | Tandem Computers Incorporated | Method and apparatus for reconciling conflicting translations by factoring and parameterizing differences |
US5842204A (en) * | 1994-10-07 | 1998-11-24 | Tandem Computers, Inc. | Method and apparatus for translating source code from one high-level computer language to another |
US5790861A (en) * | 1995-07-07 | 1998-08-04 | Sun Microsystems, Inc. | Method and apparatus for generating executable code from object-oriented C++ source code |
US5778212A (en) * | 1996-06-03 | 1998-07-07 | Silicon Graphics, Inc. | Interprocedural analysis user interface |
US5920723A (en) * | 1997-02-05 | 1999-07-06 | Hewlett-Packard Company | Compiler with inter-modular procedure optimization |
USRE41082E1 (en) * | 1998-02-03 | 2010-01-19 | Sanyo Electric Co., Ltd. | Information recorder, recording method, and recording media |
US6286134B1 (en) * | 1999-04-23 | 2001-09-04 | Sun Microsystems, Inc. | Instruction selection in a multi-platform environment |
US20030005421A1 (en) * | 2001-06-29 | 2003-01-02 | Raj Prakash | Interprocedural optimization framework |
US7284240B1 (en) * | 2002-02-14 | 2007-10-16 | Microsoft Corporation | API schema language and transformation techniques |
-
2004
- 2004-04-13 US US10/552,777 patent/US7689975B2/en not_active Expired - Fee Related
- 2004-04-13 EP EP04727084A patent/EP1627300A2/en not_active Withdrawn
- 2004-04-13 JP JP2006506834A patent/JP2006523887A/ja not_active Withdrawn
- 2004-04-13 KR KR1020057019534A patent/KR20060009843A/ko not_active Application Discontinuation
- 2004-04-13 WO PCT/IB2004/050425 patent/WO2004092953A2/en not_active Application Discontinuation
- 2004-04-13 CN CNB2004800100254A patent/CN100437476C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2006523887A (ja) | 2006-10-19 |
US7689975B2 (en) | 2010-03-30 |
WO2004092953A3 (en) | 2006-03-02 |
CN100437476C (zh) | 2008-11-26 |
CN1860437A (zh) | 2006-11-08 |
US20070067316A1 (en) | 2007-03-22 |
WO2004092953A2 (en) | 2004-10-28 |
EP1627300A2 (en) | 2006-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100462920C (zh) | 为优化的程序生成展开信息 | |
US20080104096A1 (en) | Software development system | |
JP3373517B2 (ja) | 個人の言語によるプログラム作成システム | |
US6298479B1 (en) | Method and system for compiling and linking source files | |
JPH11212797A (ja) | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 | |
CN103645930B (zh) | 汇编级跨文件调度框架的构建方法 | |
JPH10187789A (ja) | ハードウェア/ソフトウェア協調シミュレーション装置、ハードウェア/ソフトウェア協調シミュレーション方法及びハードウェア/ソフトウェア協調シミュレーションプログラムを記録した機械読み取り可能な記録媒体 | |
CN110673852B (zh) | 一种基于编译器前端实现控制流平坦的方法、系统及设备 | |
US6351848B1 (en) | Unitary data structure systems, methods, and computer program products, for global conflict determination | |
JP3802058B2 (ja) | ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ | |
KR20060009843A (ko) | 기계를 이용한 파일 처리 방법, 컴퓨터 프로그램 제품 및파일을 처리하도록 프로그래밍된 기계 | |
JP2005032212A (ja) | プログラム生成装置、方法及びプログラム | |
CN106547548B (zh) | 一种软件版本的编译方法和装置 | |
KR20120121978A (ko) | 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 | |
US20050060692A1 (en) | Method and apparatus for reducing time to generate a build for a software product from source-files | |
Mennie et al. | Giving meaning to macros | |
WO2023155863A1 (en) | Methods and devices for compiler function fusion | |
CN110737429A (zh) | 一种利用Makefile自身的依赖关系的模块化编译方法和装置 | |
CN111367563B (zh) | 主机版本合并方法及装置 | |
JPH09274570A (ja) | コンパイル方法及びコンパイラシステム | |
Despland et al. | Code generator generation based on template-driven target term rewriting | |
DE10300541A1 (de) | Erzeugen einer ausführbaren Datei | |
JP3152194B2 (ja) | コンパイル装置、コンパイル方法およびコンパイラを記録した記録媒体 | |
JP2002082811A (ja) | コンパイル方法および記録媒体 | |
Zilonka | A Study on Loop Unrolling at the Assembly Code Level |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
N231 | Notification of change of applicant | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |