Page 1 of 1

lexer.obj

Posted: Wed Oct 07, 2015 6:52 pm
by paulcodeman
Создал новую библиотеку для колибри ОС. Данная библиотека позволяет из входного текстового кода преобразовывать в лексемы, что очень удобно для парсинга (интерпретации, трансляции) кода.
Библиотека содержит следующие глобальные переменные и ф-ции, опишу основные:

lexer_struct *LEXER_LOAD(char *code);

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

Code: Select all

typedef struct
{
    char type;
    char *token;
    unsigned int lenght;
} lexer_struct;
char type // тип токена
Поддерживаются следующие:
0 -> неопределенно
1 -> переменная
2 -> функция
3 -> число
4 -> индитификатор
5 -> строковое значение
6 -> разное, не входящие в тип
7 -> последний тип, который сообщает завершение.

Следующая ф-ция:
char *LEXER_CURRENT(void);
Возвращает текущую лексему.

char *LEXER_NEXT(void);
Возвращает следующую лексему.

char *LEXER_BACK(void);
Возвращает предыдущую лексему.

Если помимо лексемы хочется получить длину и тип, то есть специальные глобальные переменные LEXER_TOKEN,LEXER_LEN,LEXER_TYPE.

Стоит отметить, ради удобства было сделано при первом вызове LEXER_NEXT возвратить LEXER_CURRENT.

Неосновные глобальные переменные:
unsigned int LEXER_LTBUF;// задать размер буфера выделения памяти по блочно для лексемы. По умолчанию 0xF.
unsigned int LEXER_LABUF;// задать размер буфера выделения памяти по блочно для массива токенов. По умолчанию 0xFF количество.
Понятно, что можно настроить для минимизации затрат ОЗУ памяти, но ф-ция LEXER_LOAD будет выполняться медленее, чем при увеличении затрат.

Re: lexer.obj

Posted: Mon Oct 12, 2015 7:11 pm
by Leency
Клево, ты переделал в либу!

Re: lexer.obj

Posted: Mon Oct 12, 2015 8:36 pm
by paulcodeman
Leency wrote:Клево, ты переделал в либу!
Да, я сейчас многое переделываю, точнее переписываю на gcc.