Разработка компилятора. Оптимизатор

Оптимизатор, безусловно, является важной частью любого компилятора, так как позволяет ускорить выполнение кода в о многих случаях в разы. Поэтому и мы не смогли оставить s4g без оптимизатора. Оптимизацию будем проводить на уровне AST, существуют так же методы оптимизации, на основе байт-кода, но мы их рассматривать в ближайшее время не будем.

Разработка компилятора. Синтаксический анализатор

В первой версии нашего языка s4g синтаксический анализ не был полностью отдельным процессом, и был совмещен с лексическим анализом. Разбор осуществлялся без каких либо четких правил, он работал, но внести какие-то изменения или дополнения без риска сломать все было несколько проблематично. Понятно, что так продолжаться долго не может, и к версии 0.9.2 синтаксический анализатор был полностью переработан.

Разработка компилятора. Контекст исполнения

Контекст исполнения играет большую роль на этапе исполнения кода, а правильная организация контекстов скажется на всей работе виртуальной машины в целом.

Разработка компилятора. Стековая виртуальная машина. Состав

После рассмотрения статьи о теоретических основах стековой виртуальной машины, необходимо рассмотреть из чего состоит стековая виртуальная машина. На протяжении долгого времени мы не могли с точностью определиться что же должно быть в виртуальной машине, и только в версии 0.9.2 сформировалось определенное понимание.

Разработка компилятора. Стековая виртуальная машина. Основы

Виртуальная машина, как некоторая идеализированная имитация процессора, является достаточно интересной темой для изучения. Стековая виртуальная машина проше для понимания процесса исполнения байт-кода. Виртуальная машина s4g переделывалась не раз, переписывалась с нуля, в одной и той же версии видоизменялась, и все для того чтобы найти наиболее подходящий вариант. В данной статье рассмотрим понятие виртуальной машины, ее функционал и возможности.

Разработка компилятора. Сборщик мусора

Сборка мусора не маловажная часть управления памятью, оперативная память не бесконечна. Говоря «сборщик мусора» обычно подразумевается объект сборщика мусора, который сам соберет все что наделал программист))

Компилируемые и интерпретируемые языки программирования. Разбор понятий

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

Разработка компилятора. Лексический анализатор

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

Разработка компилятора. Состав языка программирования

Как исходный код преобразуется во что-то что можно исполнить? Какие существуют его стадии трансформации? Как он вообще исполняется? Каков состав языка программирования? С некоторой долей уверенности ответ я могу дать только сейчас, когда мы со дня на день выпустим первую публичную версию нашего скриптового языка программирования s4g.

Разработка компилятора. Общие теоретические основы

Разработка компилятора состоит из множества процессов, кода и терминологии. В данной статье рассмотрим общие теоретические основы касаемо разработки компиляторов: разделение языков программирования на скриптовые и компилируемые, виды компиляции и типизации …