- •Использование скриптов
- •Основные состовляющие языка
- •Дополнительные функции для первой версии
- •Оператор ветвления(дополнение)
- •Будущие функции
- •Основные составляющие языка. Расширенные фундаментальные, а так же пользовательские типы
- •Соглашения о вызовах функций
- •Основные способы использования программного продукта и сценарии работы с ним
- •Основной способ использования ядра в составе стороннего программного продукта
- •Основное назначение функций
- •Функции класса core
- •Исходные тексты программ
- •Руководство пользователя
- •Возможности языка:
- •Заключение
- •Список использованной литературы
Основное назначение функций
Функции класса core
Почти все функции данного класса используют первым аргументом указатель на объект MODULE, это сделано для того, чтобы запретит модулю вмешиваться в процесс компиляции, а так же для создания дальнейших связей между модулями.
MODULE* LoadModule(char* name)
int InitModule(MODULE* module)
int LoadSourceCode(MODULE* module, char* file)
Выделяет память под исходный и загружает файл в память для дальнейшей работы с ним
int Preprocess(MODULE* module)
Заменят табуляцию и переходы на новую строку пробелами.
Удаляет более одного подряд идущего пробела.
int Parse(MODULE* module)
Проверят корректность блоков(скобок).
Запоминает глобальные переменные и функции
int Compile(MODULE* module)
Выделяет память под глобальные переменные
Компилирует функции модуля
int CompileFunction(MODULE* module, FUNCTION* function)
Организовывает извлечение аргументов из стека, сохраняя указатель на базу стека
Производит компиляцию содержимого функции как блока
Восстанавливает указатель на базу стека.
Производит замену меток.
long CompileBlock(MODULE* module, FUNCTION* function)
Находит ключевые слова операторов
Компилирует вложенные блоки
Компилирует выражения
long CompileExpression(MODULE*module, FUNCTION* function, int level)
Производит компиляцию выражения согласно приоритетам операций.
Исходные тексты программ
Текст программы написан на языке программирования С++.
Общий объем программы: 2500 строк.
В своем составе программный модуль имеет 4 файла:
Asm.h
Asm.cpp
Core.h
Core.cpp
Методика тестирования
В процессе разработки большинство тестов было посвящено функциональности продукта, на предмет корректного функционирования. Во всех случаях применялась стратегия тестирования на основе «Белого ящика». Так же изредка проводилось нагрузочное тестирование в двух направлениях: время компиляции и время исполнения, которое показывало неплохие результаты в первом случае и впечатляющие во втором.
Руководство программиста
Способы подключения ядра к стороннему продукту:
Включение всех файлов ядра в разрабатываем продукт
Создание статической библиотеки на основе этих файлов
Создание динамически-подключаемой библиотеки на основе этих файлов(требуется небольшая модификация)
Основные этапы использования ядра (на конкретном примере):
Подключение заголовочного файла “Core.h” #include “Core.h”
Инициализация ядра. CORE g_Core;
Инициализация модуля, на основе содержимого скрипта. MODULE* physics = g_Core.LoadModule("physics.c");
Объявление прототипа импортируемой функции. typedef int((*_load)(int, int));
Получение адреса функции по её названию. _load load = (_load)physics->m_Functions["load"].m_binaryCode;
Применение. int res = load(123,456);
