Этот вопрос - просто что-то, о чем я думал в последнее время. Язык программирования может быть записан на том языке как вторая реализация? например, Java. Действительно ли возможно переписать язык программирования Java с помощью языка программирования Java?
Извинения, если это - глупый вопрос, но я должен знать!
GF
Да для любого языка Turing Complete. На ум приходит Лисп как один из самых простых языков для написания интерпретатора / компилятора для себя.
Это может. Недавний пример - python имеет pypy. Немного больше информации есть на странице Википедии и несколько хороших ссылок.
Конечно.
Много-много лет назад один из моих первых домашних компьютеров, Vic 20, поставлялся со встроенным интерпретатором BASIC, но это было все. Поэтому я написал для него первую версию ассемблера на BASIC. Затем я использовал свой первый примитивный ассемблер для написания более совершенного ассемблера.
Не только возможно, но для компиляторов машинного кода это наиболее распространенный метод реализации . Хорошим практическим руководством является статья Эндрю Аппеля Axiomatic Bootstrapping: A Guide for Compiler Hackers .
Есть много практических примеров этого, одним из примеров является язык Oberon, который представляет интерес в этом обсуждении, потому что код компилятора очень читабелен, он находится в книге Project Oberon, доступной бесплатно:
Не только можно, но и нужно. ecj (компилятор Eclipse) - один из примеров, и я думаю, что сам SDK поставляется с чистым компилятором Java, хотя я могу ошибаться.
Конечно. Я даже видел, как кто-то написал компилятор COBOL, написанный на COBOL! (Ладно, не полный компилятор... но хотя бы парсер.)
.Компиляторы GCC написаны на C.
Прошло много времени с тех пор, как кто-либо собирал компиляторы C из ассемблера.
написать компилятор java на java - никаких проблем. на самом деле я думаю, что Sun javac написан на java.
однако «java» обычно означает больше, чем просто javac, поэтому ваш вопрос не очень ясен.
Всегда. Любой полный по Тьюрингу язык является - хорошо - языком полного по Тьюрингу. Если вы можете написать компилятор на одном законченном языке, вы можете написать его на любом эквивалентном языке.
Да. Пока язык является полным по Тьюрингу, вы можете реализовать язык сам по себе.