Показать сообщение отдельно
Старый 12.01.2009, 08:34   #125
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

Господа...

К чему эмоции??? Гы....

Вообщем увлекся я и написал компилятор для винды... О_о...
Ну да ладно, меняем линкер и получаецо для явы...

В архиве расплантованый по категориям проект(расписал все что нужно)

Синтаксис Delphi+ BPascal
типы пока 3 integer, char, boolean остальные вытекают из базовых

поддерживаюца массивы (надо прикрутить открытые)
поддерживаюцо переходы, упр конструкции и методы (в case надо добавить обработку [xx]..[xx]:
Разбил на модули, что бы удобнее было работать группой, оно как ассемблер и т.д. мож хто и не знает, а структуры и форматы тож мож хто не знает...

ЛОГИКА КОМПИЛЯТОРА

--------------------------------------

1. Входной файл загружается в переменную CurChar и с помощью СКАНЕРА посимвольно считывается
2. Сканер (Scaner.pas) проводит синтаксический анализ и возвращает ID текущего символа или строки в переменную CurTok
3. Парсер (Parser.pas) начинает лексический анализ используя функцию сканера GetToken для возвращения типа текущего оператора или команды и на основании этого генерирует объектный код который записывает в стек (разделен на без параметров, 1 параметр, 2 и 3) вида [ID команды]___[ID параметра[,параметров]]
То есть по сути дела стек (Code[]) - это массив из значений комманд и параметров которые потом переведутся в асм код
3.1 Попутно парсер записывает в таблицу идентификаторов имена функций, процедур, констант и массивов, и т.д.
4. После работы парсера (если в коде не обнаружено ошибок) массив передается функции AssembleAndLink (CodeGen.pas) которая на основании стекового кода уже генерирует ассемблерный код
5. После работы Кодогенератора у нас получается массив объектного кода (без заголовков, секций и т.д.) по сути дела это и есть код ассемблерной секции, а в IdentTab - готовый код для КОНТЕНТНОГО ПУЛА
6. После этого код передается в линкеру(Linker.pas) функцией WriteOpCode (пока не прикрутил) и линкер должен сформировать пул и код

Вообщем осталось всего чуть чуть, проработать Linker.pas
Так же оставил место для ASM вставок вида
asm
.......
.......
end;
и обработку его в модуле Assembl.pas (пока просто тупо пропускает как коментарии)

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

Далее... IDE уже есть, исходники кому надо предоставим, компоненты к ней и контролы тоже, подсветка в ней уже есть, как и функции сворачивания кода, нумерация строк и т.д т.п. Кто хочет заняться милости просим...

По адресу http://www.kirov.fm/pascal.zip прикрепил компилятор Java (Jikes) с библиотеками, примерами и параметрами коммандной строки....

УФ...
Вложения
Тип файла: zip Pas2Class.zip (30.5 Кб, 588 просмотров)
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо satan за это полезное сообщение:
abcdef (12.01.2009), Piligrim (12.01.2009), scimitar (13.01.2009), ViNT (12.01.2009)