Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JIT_CORE.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
60.7 Кб
Скачать
    1. Основное назначение функций

      1. Функции класса core

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

        1. MODULE* LoadModule(char* name)

        2. int InitModule(MODULE* module)

        3. int LoadSourceCode(MODULE* module, char* file)

Выделяет память под исходный и загружает файл в память для дальнейшей работы с ним

        1. int Preprocess(MODULE* module)

  1. Заменят табуляцию и переходы на новую строку пробелами.

  2. Удаляет более одного подряд идущего пробела.

        1. int Parse(MODULE* module)

  1. Проверят корректность блоков(скобок).

  2. Запоминает глобальные переменные и функции

        1. int Compile(MODULE* module)

  1. Выделяет память под глобальные переменные

  2. Компилирует функции модуля

        1. int CompileFunction(MODULE* module, FUNCTION* function)

  1. Организовывает извлечение аргументов из стека, сохраняя указатель на базу стека

  2. Производит компиляцию содержимого функции как блока

  3. Восстанавливает указатель на базу стека.

  4. Производит замену меток.

        1. long CompileBlock(MODULE* module, FUNCTION* function)

  1. Находит ключевые слова операторов

  2. Компилирует вложенные блоки

  3. Компилирует выражения

        1. long CompileExpression(MODULE*module, FUNCTION* function, int level)

  1. Производит компиляцию выражения согласно приоритетам операций.

Исходные тексты программ

Текст программы написан на языке программирования С++.

Общий объем программы: 2500 строк.

В своем составе программный модуль имеет 4 файла:

  1. Asm.h

  2. Asm.cpp

  3. Core.h

  4. Core.cpp

  1. Методика тестирования

В процессе разработки большинство тестов было посвящено функциональности продукта, на предмет корректного функционирования. Во всех случаях применялась стратегия тестирования на основе «Белого ящика». Так же изредка проводилось нагрузочное тестирование в двух направлениях: время компиляции и время исполнения, которое показывало неплохие результаты в первом случае и впечатляющие во втором.

  1. Руководство программиста

    1. Способы подключения ядра к стороннему продукту:

  1. Включение всех файлов ядра в разрабатываем продукт

  2. Создание статической библиотеки на основе этих файлов

  3. Создание динамически-подключаемой библиотеки на основе этих файлов(требуется небольшая модификация)

    1. Основные этапы использования ядра (на конкретном примере):

  1. Подключение заголовочного файла “Core.h” #includeCore.h

  2. Инициализация ядра. CORE g_Core;

  3. Инициализация модуля, на основе содержимого скрипта. MODULE* physics = g_Core.LoadModule("physics.c");

  4. Объявление прототипа импортируемой функции. typedef int((*_load)(int, int));

  5. Получение адреса функции по её названию. _load load = (_load)physics->m_Functions["load"].m_binaryCode;

  6. Применение. int res = load(123,456);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]