KR20080097826A - 실행 파일을 생성하는 방법 및 장치 - Google Patents

실행 파일을 생성하는 방법 및 장치 Download PDF

Info

Publication number
KR20080097826A
KR20080097826A KR1020070043165A KR20070043165A KR20080097826A KR 20080097826 A KR20080097826 A KR 20080097826A KR 1020070043165 A KR1020070043165 A KR 1020070043165A KR 20070043165 A KR20070043165 A KR 20070043165A KR 20080097826 A KR20080097826 A KR 20080097826A
Authority
KR
South Korea
Prior art keywords
code
source code
language
source
corresponds
Prior art date
Application number
KR1020070043165A
Other languages
English (en)
Inventor
이양선
Original Assignee
이양선
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 이양선 filed Critical 이양선
Priority to KR1020070043165A priority Critical patent/KR20080097826A/ko
Publication of KR20080097826A publication Critical patent/KR20080097826A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

실행 파일을 생성하는 방법은 소스 코드의 종류를 결정하는 단계, 상기 소스 코드가 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 상기 소스 코드를 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 단계 및 상기 중간 코드를 기초로 실행 가능한 타켓 코드를 생성하는 단계를 포함한다. 따라서 실행 파일을 생성하는 방법은 프로그램 언어 선택에 따른 제약을 피할 수 있다.

Description

실행 파일을 생성하는 방법 및 장치{METHOD OF GENERATING AN EXECUTABLE FILE AND APPARATUS OF PERFORMING THE SAME}
도 1 및 도 2는 본 발명의 일 실시예에 따른 실행 파일을 생성하는 장치의 동작을 나타내기 위한 흐름도들이다.
도 3 내지 도 8은 실행 가능한 파일을 생성하는 과정에서부터 생성된 파일을 실행하는 과정까지의 동작을 나타내는 흐름도이다.
도 9는 본 발명의 다른 일 실시예에 따른 실행 가능한 파일을 생성하는 장치의 동작을 나타내는 흐름도이다.
<도면의 주요 부분에 대한 부호의 설명>
100 : 실행 가능한 파일을 생성하는 장치
102 : 컴파일러 103 : 번역기
104 : 어셈블러 150 : 타켓 머신
본 발명의 실시예들은 프로그램의 생성에 관한 것으로 특히, 실행 파일을 생성하는 방법 및 이를 실행하는 장치에 관한 것이다.
일반적으로 사용자는 특정 프로그램 언어에 따른 소스 코드를 작성하고 소스 코드를 컴파일하여 실행 가능한 파일을 생성한다.
예를 들어, 프로그램 언어가 C/C++ 언어에 상응하는 경우에는 사용자는 C/C++ 언어의 문법(syntax)에 따라 소스 코드를 작성하고 C/C++ 컴파일러를 이용하여 소스 코드를 실행 가능한 파일로 변환할 수 있고, 프로그램 언어가 Java 언어에 상응하는 경우에는 사용자는 Java 언어의 문법에 따라 소스 코드를 작성하고 Java 컴파일러를 이용하여 소스 코드를 실행 가능한 파일로 변환할 수 있다.
소스 코드를 실행 가능한 파일로 변환하는 방법은 프로그램 언어 또는 컴파일러에 따라 다르므로, 사용자는 소스 코드를 작성하기 이전에 미리 사용할 프로그램 언어를 결정해야 하는 문제점이 발생한다. 즉, 프로그램 언어 선택 또는 컴파일러에 따른 제약으로 인하여 사용자는 다양한 플랫폼에 적절한 실행 가능한 파일을 제작할 수 없다.
또한, 이전에 생성된 라이브러리 코드 역시 프로그램 언어 또는 컴파일러에 따라 다르므로, 사용자는 라이브러리 코드가 생성될 때 사용된 프로그램 언어와 다른 프로그램 언어를 사용할 수 없는 문제점이 발생한다.
따라서 다양한 플랫폼에 적절한 실행 가능한 파일을 제작하기 위해서는 프로그램 언어 또는 컴파일러에 무관하게 실행 가능한 파일을 생성할 수 있고 이전에 생성된 라이브러리 코드를 이용할 수 있는 방법이 요구된다.
본 발명의 목적은 상기 종래 기술의 문제점을 해결하기 위하여 프로그램 언 어 선택에 따른 제약을 피할 수 있는 실행 가능한 파일을 생성하는 방법을 제공하는데 있다.
본 발명의 다른 목적은 상기 목적을 수행할 수 있는 장치를 제공하는 데 있다.
상기 목적을 달성하기 위하여 본 발명의 실행 파일을 생성하는 방법은 소스 코드의 종류를 결정하는 단계, 상기 소스 코드가 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 상기 소스 코드를 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 단계 및 상기 중간 코드를 기초로 실행 가능한 타켓 코드를 생성하는 단계를 포함한다.
상기 방법은 상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소스 코드를 상기 중간 코드로 직접 변환하는 단계를 더 포함할 수 있다.
예를 들어, 상기 중간 코드는 자바 바이트코드(Java Bytecode) 또는 MSIL(Microsoft Intermediate Language) 코드에 상응할 수 있다.
상기 다른 목적을 달성하기 위하여 본 발명의 실행 파일을 생성하는 장치는 소스 코드가 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 상기 소스 코드를 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 컴파일러, 상기 중간 코드를 기초로 실행 가능한 타켓 코드를 생성하는 어셈블러를 포함한다.
상기 장치는 상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소 스 코드를 상기 중간 코드로 직접 변환하는 번역기를 더 포함할 수 있다.
일 실시예에 따라, 상기 컴파일러는 상기 소스 코드의 종류에 따른 복수개의 컴파일링부들을 포함하고, 상기 소스 코드에서 사용된 언어에 따라 상기 복수개의 컴파일링부들 내의 컴파일링부를 이용하여 상기 중간 코드를 생성할 수 있다.
상기 또 다른 목적을 달성하기 위하여 본 발명의 실행 파일을 생성하는 방법은 (a) 소스 코드를 입력받는 단계, (b) 상기 입력받은 소스 코드가 텍스트 코드에 상응하는지 여부를 결정하는 단계, (c) 상기 소스 코드가 상기 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 단계, (d) 상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소스 코드를 상기 중간 코드로 직접 변환하는 단계, (e) 상기 소스 코드의 유무를 체크하여 상기 소스 코드가 더 존재하는 경우에는 상기 (a) 단계로 이동하는 단계, 및 (f) 상기 소스 코드가 더 이상 존재하지 않는 경우에는 상기 생성되거나 변환된 모든 중간 코드들을 기초로 실행 가능한 타켓 코드를 생성하는 단계를 포함한다.
상기에서 제시한 본 발명의 실시예들은 다음의 장점들을 포함하는 효과를 가질 수 있다. 다만, 본 발명의 모든 실시예들이 이를 전부 포함하여야 한다는 의미는 아니므로, 본 발명의 권리범위는 이에 의하여 제한되는 것으로 이해되어서는 아니 될 것이다.
따라서 본 발명의 일 실시예는 소스 코드에 관계없이 동일한 중간 코드를 생성하여 프로그램 언어 선택에 따른 제약을 피할 수 있다.
또한, 본 발명의 일 실시예는 바이너리 코드를 변환하여 이전에 생성된 라이브러리 코드도 이용할 수 있다
이하, 본 발명의 실시예들을 도면과 함께 설명하고자 한다.
본 발명의 실시예들에 관한 설명은 본 발명의 구조적 내지 기능적 설명들을 위하여 예시된 것에 불과하므로, 본 발명의 권리범위는 본문에 설명된 실시예들에 의하여 제한되는 것으로 해석되어서는 아니 된다. 즉, 본 발명의 실시예들은 다양한 변경이 가능하고 여러 가지 형태를 가질 수 있으므로 본 발명의 기술적 사상을 실현할 수 있는 균등물들을 포함하는 것으로 이해되어야 한다.
한편, 본 발명에서 서술되는 용어의 의미는 다음과 같이 이해되어야 할 것이다.
"제1", "제2" 등의 용어는 하나의 구성요소를 다른 구성요소로부터 구별하기 위한 것으로 이들 용어들에 의해 본 발명의 권리범위가 한정되어서는 아니 된다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
"및/또는"의 용어는 하나 이상의 관련 항목으로부터 제시가능 한 모든 조합을 포함하는 것으로 이해되어야 한다. 즉, "제1 항목, 제2 항목 및/또는 제3 항목"의 의미는 제1, 제2 또는 제3 항목을 포함할 뿐만 아니라 제1, 제2 및 제3 항목들 중 2개 이상으로부터 제시될 수 있는 모든 항목의 조합을 의미한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결될 수도 있지만, 중간에 다른 구성요소가 존재할 수 도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 한편, 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 발명에서 기재된 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한 복수의 표현을 포함하는 것으로 이해되어야 하고, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
본 발명에서 기술한 각 단계들은 문맥상 명백하게 특정 순서를 기재하지 않은 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 단계들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
여기서 사용되는 모든 용어들은 다르게 정의되지 않는 한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한 이상적이거나 과도하게 형식적인 의미 를 지니는 것으로 해석될 수 없다.
도 1 및 도 2는 본 발명의 일 실시예에 따른 실행 파일을 생성하는 장치의 동작을 나타내기 위한 흐름도들이다.
도 1을 참조하면, 실행 파일을 생성하는 장치(이하, "코드 생성기"라 함)(100)는 컴파일러(102), 번역기(103) 및 어셈블러(104)를 포함한다.
코드 생성기(100)는 소스 코드(110)의 종류를 결정한다(단계 S110). 일 실시예에 따라, 코드 생성기(100)는 소스 코드(110)가 텍스트 코드인지 또는 바이너리 코드인지를 결정할 수 있다. 다른 일 실시예에 따라, 코드 생성기(100)는 소스 코드(110)가 텍스트 코드인 경우에는 소스 코드(110)에서 사용된 언어(예를 들어, Java 또는 C/C++)도 결정할 수 있다.
컴파일러(102)는 소스 코드(110)가 텍스트 코드에 상응하는 경우에는 소스 코드(110)에서 사용된 언어에 따라 소스 코드(110)를 컴파일하여 언어에 무관한 동일한 중간 코드(120)를 생성한다(단계 S120).
예를 들어, 소스 코드(110)가 C/C++ 언어로 작성된 경우에는 컴파일러(102)는 C/C++ 컴파일러 루틴을 이용하여 소스 코드(110)를 컴파일할 수 있고, 소스 코드(110)가 Java 언어로 작성된 경우에는 컴파일러(102)는 Java 컴파일러 루틴을 이용하여 소스 코드(110)를 컴파일할 수 있으며, 최종적으로 컴파일된 소스 코드(110)는 소스 코드(110)에서 사용된 언어(즉, C/C++ 언어 또는 Java 언어)와 무관한 동일한 중간 코드(120)를 가진다.
일 실시예에 따라, 컴파일러(102)는 소스 코드(110)의 종류에 따른 복수개의 컴파일링부들(미도시됨)을 포함하고, 소스 코드(110)에서 사용된 언어에 따라 복수개의 컴파일링부들(미도시됨) 내의 컴파일링부를 이용하여 중간 코드(120)를 생성할 수 있다.
번역기(103)는 소스 코드(110)가 바이너리 코드에 상응하는 경우에는 소스 코드(110)를 중간 코드(120)로 직접 변환한다(단계 S130). 즉, 바이너리 코드는 이전에 컴파일된 코드이므로 바이너리 코드는 컴파일러(102)에 의하여 다시 컴파일되지 않고 언어에 무관한 동일한 중간 코드(120)로 직접 변환된다.
중간 코드(120)는 새로운 형태의 코드일 수도 있고, 일 실시예에 따라 중간 코드(120)는 자바 바이트코드(Java Bytecode) 또는 MSIL(Microsoft Intermediate Language) 코드에 상응할 수 있다.
어셈블러(104)는 중간 코드(120)를 기초로 실행 가능한 타켓 코드를 생성한다(단계 S140). 즉, 어셈블러(104)는 컴파일러(102)에 의하여 생성된 중간 코드(120a) 및 번역기(103)에 의하여 생성된 중간 코드(120b)를 기초로 최종 실행 가능한 타켓 코드를 생성한다.
예를 들어, 타켓 코드는 특정 CPU(Central Processing Unit)에 상응하는 기계어 코드일 수 있고, CPU에 무관한 가상 머신(VM, Virtual Machine)에 상응하는 가상 머신 코드일 수 있다.
도 3 내지 도 8은 실행 가능한 파일을 생성하는 과정에서부터 생성된 파일을 실행하는 과정까지의 동작을 나타내는 흐름도이다.
이하, 실행 가능한 파일을 생성하는 과정을 설명한다.
코드 생성기(100)는 소스 코드(110)가 바이너리 코드에 상응하는지 여부를 결정한다(단계 S310).
소스 코드(110)가 바이너리 코드에 상응하지 않은 경우에는 코드 생성기(100)는 소스 코드(110)에서 사용된 언어가 C/C++ 언어에 상응하는지 여부를 결정한다(단계 S320).
소스 코드(100)에서 사용된 언어가 C/C++ 언어에 상응하는 경우에는 코드 생성기(100)는 복수의 컴파일링부들 중 하나(이하, "C/C++ 컴파일러"라 함)를 이용하여 소스 코드(110)(이하, "C/C++ 소스 코드(110a)"라 함)를 컴파일한다. 이하, 보다 상세한 동작들을 설명한다.
C/C++ 컴파일러는 C/C++ 소스 코드(110a)대하여 전처리 연산을 수행한다(단계 S410). 예를 들어, 전처리 연산은 C/C++ 소스 코드(110a)에서 정의한 사항을 다른 파일로부터 가져오는 연산 또는 매크로를 적절하게 대체하는 연산을 포함할 수 있다.
C/C++ 컴파일러는 C/C++ 소스 코드(110a)대하여 어휘 분석(lexical analysis) 연산을 수행한다(단계 S420). 예를 들어, 어휘 분석 연산은 C/C++ 언어의 문법이 맞는지 여부를 결정할 수 있다.
C/C++ 컴파일러는 C/C++ 소스 코드(110a)에 어휘적 오류가 있는지 결정한다(단계 S425).
C/C++ 소스 코드(110a)에 어휘적 오류가 있는 경우에는 사용자는 프로그램을 수정할 수 있고(단계 S440), C/C++ 소스 코드(110a)에 어휘적 오류가 없는 경우에 는 C/C++ 컴파일러는 구문 분석(parsing) 연산을 수행한다(단계 S430).
C/C++ 소스 코드(110a)에 구문적 오류가 있는 경우에는 사용자는 프로그램을 수정할 수 있고(단계 S440), C/C++ 소스 코드(110a)에 구문적 오류가 없는 경우에는 C/C++ 컴파일러는 중간 코드(120a)를 생성한다(단계 S450).
소스 코드(100)에서 사용된 언어가 Java 언어에 상응하는 경우에는 코드 생성기(100)는 복수의 컴파일링부들 중 하나(이하, "Java 컴파일러"라 함)를 이용하여 소스 코드(110)(이하, "Java 소스 코드(110b)"라 함)를 컴파일한다. 이하, 보다 상세한 동작들을 설명한다.
Java 컴파일러는 Java 소스 코드(110b)대하여 어휘 분석(lexical analysis) 연산을 수행한다(단계 S510). 예를 들어, 어휘 분석 연산은 Java 언어의 문법이 맞는지 여부를 결정할 수 있다.
Java 컴파일러는 Java 소스 코드(110b)에 어휘적 오류가 있는지 결정한다(단계 S515).
Java 소스 코드(110b)에 어휘적 오류가 있는 경우에는 사용자는 프로그램을 수정할 수 있고(단계 S530), Java 소스 코드(110b)에 어휘적 오류가 없는 경우에는 Java 컴파일러는 구문 분석(parsing) 연산을 수행한다(단계 S520).
Java 소스 코드(110b)에 구문적 오류가 있는 경우에는 사용자는 프로그램을 수정할 수 있고(단계 S530), Java 소스 코드(110b)에 구문적 오류가 없는 경우에는 Java 컴파일러는 클래스 링킹 연산을 수행한다(단계 S540). 예를 들어, 클래스 링킹 연산은 현재 Java 소스 코드(110b)에서 이입한(import) 다른 클래스를 연결하기 위하여 수행될 수 있다.
Java 컴파일러는 링킹할 클래스가 더 존재하는지 여부를 결정한다(단계 S545).
링킹할 클래스가 더 존재하는 경우에는 Java 컴파일러는 클래스를 로딩하고(단계 S550) 단계 S510으로 이동하고, 링킹할 클래스가 더 존재하지 않은 경우에는 Java 컴파일러는 중간 코드(120a)를 생성한다(단계 S560).
소스 코드(110)가 바이너리 코드에 상응하는 경우에는 번역기(103)는 소스 코드(110)를 중간 코드로 직접 변환한다. 이하, 설명의 편의를 위하여 바이너리 코드는 자바의 바이트 코드에 상응한다고 가정한다.
번역기(103)는 바이트 코드를 로딩하고(단계 S610), 클래스를 링킹한다(단계 S620). 즉, 번역기(103)는 외부 참조(external reference)를 해결하기 위하여 필요한 다른 클래스를 링킹한다.
번역기(103)는 링킹할 클래스가 더 존재하는지 여부를 결정한다(단계 S626).
링킹할 클래스가 더 존재하는 경우에는 번역기(103)는 클래스를 탐색하고(단계 S630), 단계 S610으로 이동한다.
링킹할 클래스가 더 존재하지 않은 경우에는 번역기(103)는 바이트 코드를 변환하여 중간 코드(120)를 생성한다(단계 S640 ~ 단계 670). 예를 들어, 변환은 헤더 영역 변환(단계 S640), 데이터 영역 변환(단계 S650) 및 코드 영역 변환(단계 S660)을 포함할 수 있다.
어셈블러(104)는 중간 코드(120)를 로딩한다(단계 S710). 예를 들어, 중간 코드(120)는 C/C++ 소스 코드(110a)와 Java 소스 코드(110b)를 컴파일하여 생성된 중간 코드(120a)와 바이너리 코드를 변환하여 생성된 중간 코드(120b)를 포함할 수 있다.
어셈블러(104)는 중간 코드(120)가 디버그 정보에 상응하는지 여부를 결정한다(단계 S715).
중간 코드(120)가 디버그 정보에 상응하는 경우에는 어셈블러(104)는 디버깅 정보를 처리하고(단계 S730), 단계 S740으로 이동한다.
중간 코드(120)가 디버그 정보에 상응하지 않은 경우에는 어셈블러(104)는 중간 코드(120)의 링킹/레졸루션(linking/resolution)을 처리한다(단계 S720).
어셈블러(104)는 중간 코드(120)가 더 존재하는지 여부를 결정한다(단계 S740).
중간 코드(120)가 더 존재하는 경우에는 단계 S710으로 이동하고, 중간 코드(120)가 더 존재하지 않은 경우에는 어셈블러(104)는 중간 코드(120)를 기초로 실행 가능한 파일을 생성한다(단계 S750).
이하, 실행 가능한 파일(이하, "실행 파일"이라 함)을 실행하는 과정을 설명한다. 설명의 편의를 위하여 타켓 머신(150)은 가상 머신이라고 가정하였다.
가상 머신은 실행 파일을 로딩하고(단계 S810), 실행 파일의 메인 함수를 실행한다(단계 S820).
가상 머신은 실행 파일에 포함된 연산 코드를 패치하여(단계 S830) 연산 코드를 실행한다(단계 S840).
연산 코드가 내장 라이브러리를 사용하는 경우에는 가상 머신은 내장 라이브러리를 실행한다(단계 S845, S850).
연산 코드가 스레드(thread)를 사용하는 경우에는 가상 머신은 스레드를 스케줄한다(단계 S855, S860).
연산 코드가 예외를 발생시킨 경우에는 가상 머신은 예외 처리를 수행한다(단계 S865, S870).
가상 머신은 연산 코드가 실행 파일의 끝이 아니라면 이벤트를 기다리고(단계 S875, S880), 이벤트가 발생한 경우에는 이벤트를 처리한다(단계 S885, S890).
도 9는 본 발명의 다른 일 실시예에 따른 실행 가능한 파일을 생성하는 장치의 동작을 나타내는 흐름도이다.
코드 생성기(100)는 소스 코드(110)를 입력받는다(단계 S910).
코드 생성기(100)는 소스 코드(110)가 텍스트 코드에 상응하는지 여부를 결정한다(단계 S920).
소스 코드(110)가 텍스트 코드에 상응하는 경우에는 코드 생성기(100)는 소스 코드(110)에서 사용된 언어에 따라 컴파일하여 언어에 무관한 동일한 중간 코드(120)를 생성한다(단계 S930).
소스 코드(110)가 바이너리 코드에 상응하는 경우에는 코드 생성기(100)는 소스 코드(110)를 중간 코드(120)로 직접 변환한다(단계 S940).
코드 생성기(100)는 소스 코드(110)의 유무를 체크한다(단계 S950).
소스 코드(110)가 더 존재하는 경우에는 단계 S910으로 이동하고, 소스 코드 가 더 이상 존재하지 않는 경우에는 코드 생성기(100)는 모든 중간 코드들을 기초로 실행 가능한 타켓 코드를 생성한다(단계 S960).
상기에서 제시한 본 발명의 실시예들은 다음의 장점들을 포함하는 효과를 가질 수 있다. 다만, 본 발명의 모든 실시예들이 이를 전부 포함하여야 한다는 의미는 아니므로, 본 발명의 권리범위는 이에 의하여 제한되는 것으로 이해되어서는 아니 될 것이다.
본 발명의 일 실시예는 소스 코드에 관계없이 동일한 중간 코드를 생성하여 프로그램 언어 선택에 따른 제약을 피할 수 있다.
또한, 본 발명의 일 실시예는 바이너리 코드를 변환하여 이전에 생성된 라이브러리 코드도 이용할 수 있다
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.

Claims (7)

  1. 소스 코드의 종류를 결정하는 단계;
    상기 소스 코드가 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 상기 소스 코드를 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 단계; 및
    상기 중간 코드를 기초로 실행 가능한 타켓 코드를 생성하는 단계를 포함하는 실행 파일을 생성하는 방법.
  2. 제1항에 있어서,
    상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소스 코드를 상기 중간 코드로 직접 변환하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제2항에 있어서, 상기 중간 코드는 자바 바이트코드(Java Bytecode) 또는 MSIL(Microsoft Intermediate Language) 코드에 상응하는 것을 특징으로 하는 방법.
  4. 소스 코드가 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 상기 소스 코드를 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 컴파일러;
    상기 중간 코드를 기초로 실행 가능한 타켓 코드를 생성하는 어셈블러를 포함하는 실행 파일을 생성하는 장치.
  5. 제4항에 있어서,
    상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소스 코드를 상기 중간 코드로 직접 변환하는 번역기를 더 포함하는 것을 특징으로 하는 장치.
  6. 제5항에 있어서, 상기 컴파일러는
    상기 소스 코드의 종류에 따른 복수개의 컴파일링부들을 포함하고, 상기 소스 코드에서 사용된 언어에 따라 상기 복수개의 컴파일링부들 내의 컴파일링부를 이용하여 상기 중간 코드를 생성하는 것을 특징으로 하는 장치.
  7. (a) 소스 코드를 입력받는 단계;
    (b) 상기 입력받은 소스 코드가 텍스트 코드에 상응하는지 여부를 결정하는 단계;
    (c) 상기 소스 코드가 상기 텍스트 코드에 상응하는 경우에는 상기 소스 코드에서 사용된 언어에 따라 컴파일하여 상기 언어에 무관한 동일한 중간 코드를 생성하는 단계;
    (d) 상기 소스 코드가 바이너리 코드에 상응하는 경우에는 상기 소스 코드를 상기 중간 코드로 직접 변환하는 단계;
    (e) 상기 소스 코드의 유무를 체크하여 상기 소스 코드가 더 존재하는 경우에는 상기 (a) 단계로 이동하는 단계; 및
    (f) 상기 소스 코드가 더 이상 존재하지 않는 경우에는 상기 생성되거나 변환된 모든 중간 코드들을 기초로 실행 가능한 타켓 코드를 생성하는 단계를 포함하는 실행 파일을 생성하는 방법.
KR1020070043165A 2007-05-03 2007-05-03 실행 파일을 생성하는 방법 및 장치 KR20080097826A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020070043165A KR20080097826A (ko) 2007-05-03 2007-05-03 실행 파일을 생성하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070043165A KR20080097826A (ko) 2007-05-03 2007-05-03 실행 파일을 생성하는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20080097826A true KR20080097826A (ko) 2008-11-06

Family

ID=40285562

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070043165A KR20080097826A (ko) 2007-05-03 2007-05-03 실행 파일을 생성하는 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20080097826A (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101242479B1 (ko) * 2011-07-01 2013-03-18 한국과학기술연구원 어플리케이션 배포 시스템 및 방법
KR101349631B1 (ko) * 2011-12-07 2014-01-09 한국과학기술연구원 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
WO2017150841A1 (ko) * 2016-03-04 2017-09-08 삼성전자(주) 전자장치, 어플리케이션 실행 시스템 및 그 제어방법
KR20190119794A (ko) 2018-04-13 2019-10-23 고려대학교 산학협력단 프로그래밍 언어 학습을 위한 전자책 뷰어 및 구동 방법, 상기 방법을 수행하기 위한 저장 매체

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101242479B1 (ko) * 2011-07-01 2013-03-18 한국과학기술연구원 어플리케이션 배포 시스템 및 방법
KR101349631B1 (ko) * 2011-12-07 2014-01-09 한국과학기술연구원 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
WO2017150841A1 (ko) * 2016-03-04 2017-09-08 삼성전자(주) 전자장치, 어플리케이션 실행 시스템 및 그 제어방법
KR20170103559A (ko) * 2016-03-04 2017-09-13 삼성전자주식회사 전자장치, 어플리케이션 실행 시스템 및 그 제어방법
KR20190119794A (ko) 2018-04-13 2019-10-23 고려대학교 산학협력단 프로그래밍 언어 학습을 위한 전자책 뷰어 및 구동 방법, 상기 방법을 수행하기 위한 저장 매체

Similar Documents

Publication Publication Date Title
Wang et al. Uroboros: Instrumenting stripped binaries with static reassembling
US8850414B2 (en) Direct access of language metadata
US6345384B1 (en) Optimized program code generator, a method for compiling a source text and a computer-readable medium for a processor capable of operating with a plurality of instruction sets
JP2005202936A (ja) Java(登録商標)仮想マシンの性能を向上させる方法及びその方法により動作されるシステム
EP0905617A2 (en) Method for generating a java bytecode data flow graph
JP2007141173A (ja) コンパイルシステム、デバッグシステムおよびプログラム開発システム
CN109933327B (zh) 基于代码融合编译框架的OpenCL编译器设计方法和系统
US8776024B2 (en) Software application fine-tuning method, system, and corresponding computer program product
US20090049431A1 (en) Method and compiler of compiling a program
JP2007304840A (ja) コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
KR20080097826A (ko) 실행 파일을 생성하는 방법 및 장치
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
JP6357814B2 (ja) 未完成ソフトウェアの分析
CN117075909B (zh) 用于实现并行编程的编译方法、电子设备和介质
KR101636517B1 (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템의 디버그 정보 처리 방법
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP4719415B2 (ja) 情報処理システム及びコード生成方法
CN115237419A (zh) 一种异构目标代码生成方法、装置及系统
KR101705996B1 (ko) 자바스크립트 소스 코드를 최적화하기 위한 자바스크립트 소스 코드 정적 분석 장치 및 방법
Osmialowski How the Flang frontend works: Introduction to the interior of the open-source fortran frontend for LLVM
JP2008204023A (ja) プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
Leupers Compiler optimization for media processors
Morales et al. Towards description and optimization of abstract machines in an extension of prolog
KR101670726B1 (ko) 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application