Как сделать компилятор для андроида

242
14 марта 2017, 13:02

Как сделать компилятор для андроида например компилятор по c++ или другие языки программирования без разницы. И что для этого нужно знать?

Answer 1

Путь героя выглядит так:

  1. Придумайте свою грамматику, ну то есть свой язык (если речь идет о C++, то все сильно упрощается поскольку грамматику уже до вас разработали Керниган, Риччи и Страуструп)
  2. Далее пишем парсер вашей грамматики - к вашему счастью это уже давно формализовано и доведено до автоматизма - берите ANTLR или yacc - они переводят формализованную грамматику вашего языка до генератора парсера - то есть разобьют ваши грамматические изыски до токенов, лексем и проч.
  3. Далее для лексем и токенов, до которых будет разбит ваш язык пишете машинные коды/инструкции. Типа если есть конструкция if это соответствует ассемблерной инструкции jnz ну и т.д.
  4. Потом собираете линкер, то есть некую аппу, которая разрешает внешние ссылки - привязывает ваш код, в котором есть вызовы внешних библиотек к либам, добавляет необходимые прибамбасы, что получился нормальный executable - исполняемый согласно правилам оси файл.
  5. В итоге на выходе получаете компилятор в первой итерации (вся процедура называется bootstrapping
  6. Если применимо (то есть, если бутстраппинг был сделан на самом языке) то получившийся код компилятора компилируете своим компилятором еще раз - self-hosting

Если речь идет об интерпретаторе, то все сильно упрощается и обычно завершается на этапе 2.5 - то есть токены и лексемы доводятся до псевдомашинного кода.

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

READ ALSO
Какая разница в алгоритмах работы GC, Copying и Compaction?

Какая разница в алгоритмах работы GC, Copying и Compaction?

Понятно что оба алгоритма, призваны "сжать" используемые ячейки памяти так, что-бы они шли подряд

161
Прикладная задача на java 8 stream API

Прикладная задача на java 8 stream API

Есть три класса: A, B и CКласс C содержит поле List<B>, класс B содержит поле List<A>

219
JSTL передача параметра в value из input

JSTL передача параметра в value из input

Доброго времени! Подскажите как передать значение из input в value?

203
Помощь с html плеером

Помощь с html плеером

Здравствуйте, не подскажите как можно сделать одинаковый дизайн (или хотя бы немного похожий) стандартного видео плеера на всех браузерах...

172