Skip to content

Artimary/gl-lang-compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gl-lang-compiler

Описание проекта

Проект gl-lang-compiler представляет собой компилятор, предназначенный для архитектуры команд AArch64. Он выполняет разбор исходного кода, построение абстрактного синтаксического дерева (AST), построение дерева операций и графа потока управления. В перспективе планируется вывод в ассемблерный листинг.

Кроме того, проект генерирует визуализации в формате DOT для AST и графа вызовов функций.

Запуск программы

Для запуска программы в Windows используйте терминал и выполните команду:

./WinV.exe example.txt treeAST.dot

где:

  • example.txt — входной файл с исходным кодом для разбора,
  • treeAST.dot — выходной файл с деревом разбора в формате DOT.

Выходные файлы

  • treeAST.dot — файл с визуализацией абстрактного синтаксического дерева (AST) в формате DOT.
  • call_graph.dot — файл с графом вызовов функций в формате DOT.

Эти файлы можно просмотреть с помощью программ для визуализации графов, например, Graphviz.

Структура проекта

  • LinuxV/ — исходные файлы проекта, включая код генерации кода, построения AST и управления графами.
  • WinV/ — файлы и исполняемые файлы для Windows.
  • Makefile — файл сборки проекта.

Зависимости

  • Компилятор gcc
  • Библиотека antlr3c (используется для лексического и синтаксического анализа)

Данный проект предназначен для изучения и экспериментов с компиляторами и генерацией кода.

Синтаксис языка

Язык, поддерживаемый компилятором, имеет следующий синтаксис:

  • Программа состоит из набора функций.
  • Определение функции включает сигнатуру с типом возвращаемого значения, именем функции и списком параметров.
  • Поддерживаются базовые типы: bool, byte, int, uint, short, long, char, string, unsigned, signed, void, float, double.
  • Объявления переменных с указанием типа.
  • Управляющие конструкции: if, else, switch, while, do-while, break, return.
  • Выражения включают арифметические, логические, побитовые операции, вызовы функций, индексацию массивов.
  • Поддерживаются массивы с указанием размеров.
  • Комментарии: многострочные /* ... */ и однострочные // ....
  • Литералы: булевы значения (true, false), целые числа, числа в двоичной, шестнадцатеричной системах, символы и строки.

Пример определения функции:

int sum(int a, int b) {
    return a + b;
}

Пример использования управляющей конструкции:

if (a > b) {
    return a;
} else {
    return b;
}

Данный синтаксис описан в файле грамматики LinuxV/antlr/labgramm.g.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages