Когда вы можете утверждать, что ваша программа является «компилятором»? - PullRequest
4 голосов
/ 02 марта 2011

Согласно Википедии

Компилятор - это компьютерная программа (или набор программ), которая преобразует исходный код, написанный на языке программирования (исходный язык), в другой компьютерный язык (целевой язык, часто имеющий двоичную форму, известную как объектный код). ). Наиболее распространенная причина желания преобразовать исходный код - создать исполняемую программу.

Но можно ли считать следующий фрагмент кода компилятором?

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

Я знаю, что это упрощение, но когда вы можете сказать, что данная программа на самом деле является "компилятором"?

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Является ли язык, состоящий из строки «1» с семантикой печати «Привет!» язык программирования? Я бы сказал нет, так что это не компилятор.

Когда он принимает настоящий язык программирования и преобразует его в другой, отдельный язык, вы называете его компилятором. Обычно это включает в себя синтаксический анализ исходного языка, чтобы придумать семантическое значение, а затем изменить его на другой язык.

1 голос
/ 02 марта 2011

Можно использовать полнота по Тьюрингу в качестве критерия, но это немного строго (язык программирования специального назначения может быть не полон по Тьюрингу), поэтому я пойду с чем-то менее жестким.

Я думаю, что ключ в том, что на выходе будет серия инструкций , и что между этим выходом и входом будет нетривиальное соответствие .Пример, который вы приводите, нарушает последний критерий, потому что есть только два возможных выхода независимо от того, насколько сложен вход: "echo Hi" и ничего.

Соответствие может быть очень близким (как между FORTRAN и сборкой) или болееотдаленный (Пролог или Лисп и сборка), но до тех пор, пока возможно создать огромное количество поведений с помощью связного языка ввода, это компилятор.

...