2011-03-01 2 views
4

Accorging언제 프로그램이 "컴파일러"라고 주장 할 수 있습니까?

wikipedia하는 컴파일러는 종종을 갖는 다른 컴퓨터 언어로 프로그래밍 언어로 기술 된 소스 코드 (소스 언어) (목표 언어를 변환하는 컴퓨터 프로그램 (또는 프로그램 세트) 인 오브젝트 코드로 알려진 이진 형식). 소스 코드를 변환하려는 가장 일반적인 이유는 실행 가능한 프로그램을 만드는 것입니다.

그러나 다음 코드는 컴파일러로 간주 될 수 있습니까?

class S { 
    public static void main(String ... args) { 
    if("1".equals(args[0])) { 
     System.out.println("echo Hi"); 
    } 
    } 
} 

나는 이것이 지나치게 단순화 된 것을 알고 있지만, 주어진 프로그램이 실제로 "컴파일러"라고 할 수 있습니까?

+0

매우 간단한 컴파일러 ... 매우 일반적인 것은 아닙니다.) – Oded

+0

소스 언어에 하나의 유효한 프로그램 ("1")이 포함되어 있고 타겟 언어가 하나의 명령으로 쉘 스크립트의 자체 하위 집합 인 경우 - "Hi" 그렇다. 그렇지 않으면 아니오. – Tesserex

+1

큰 질문이지만, 커뮤니티 위키일까요? –

답변

3

"Hi!"인쇄의 의미와 함께 문자열 "1"로 구성된 언어입니다. 프로그래밍 언어? 나는 컴파일러가 아니라고 말하고 싶다.

실제 프로그래밍 언어를 받아들이고 다른 언어로 변환하면 컴파일러라고 부릅니다. 여기에는 일반적으로 의미 원어를 구상하기 위해 소스 언어를 파싱 한 다음 다른 언어로 바꾸는 작업이 포함됩니다.

1

하나는 기준으로 Turing-completeness을 사용할 수 있지만 약간 엄격합니다 (특수 목적 프로그래밍 언어는 Turing-complete가 아닐 수도 있습니다). 그래서 조금 덜 경직되어 있습니다.

I는 키가 출력 지시의 일련 인 것이, 그 출력과 입력 사이에 비 단순 대응있을 것으로 생각한다. 당신이주는 예제는 후자의 기준에 위배됩니다. 왜냐하면 입력이 얼마나 복잡한 지 상관없이 두 개의 가능한 출력이 있기 때문입니다 : "echo Hi"과 아무 것도 없습니다.

대응 성은 FORTRAN과 어셈블리 사이에서 매우 비슷하거나 더 먼 (Prolog 또는 Lisp 및 어셈블리) 일 수 있지만 일관된 입력 언어를 통해 방대한 양의 동작을 생성 할 수있는 한 컴파일러 .

+0

Turing-completeness가 도움이되지 않습니다. 예를 들어, SQL 쿼리 컴파일러를 제외 할 것입니다. –

+0

고마워요. 그 말은 "특수 목적 프로그래밍 언어"에 대한 좋은 예입니다. –

관련 문제