Господа...
К чему эмоции??? Гы....
Вообщем увлекся я и написал компилятор для винды... О_о...
Ну да ладно, меняем линкер и получаецо для явы...
В архиве расплантованый по категориям проект(расписал все что нужно)
Синтаксис 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) с библиотеками, примерами и параметрами коммандной строки....
УФ...