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

Итак мы подошли к созданию функций нижнего уровня! Почему я так заострил вопрос о именно нижнем уровне? Все очень просто. Многие простые компиляторы и интерпритаторы начинаются с верхнего уровня, и когда доходят до создания файлов то происходит как бы ломка кода... Или приходится дорабатывать анализаторы, что бы код был по возможности оптимальным, или дорабатывать выходной файл (ASMили байт-код)... В любом случае ошибки допущенные сверху сказываются на коде в прогрессии.

Итак предлагаю определить две переменные. Первая это

Var

Token : array of record
Name : String;
Types : Byte;
Code : Array of byte;
end;

ByteCode: array of record
Name : String;
Types : Byte;
Len : Byte;
end;

Теперь представте как работает Лексич. Анализатор. Он разобьет наш скрипт на отдельные лексемы, но не просто а запишет их в переменную Token? Поэтому строка вида class
HelloWorld{ превратится в набор

Token[0].Name = “Class”
Token[0].Types = _CLASSES
Token[0].Code[] = []

Token[1].Name = “
HelloWorld
Token[1].Types = _UTF8
Token[1].Code[] = [$48, $65, $6C, $6C, $6F, $57, $6F, $72, $6C, $64]

Token[2].Name = “{”
Token[2].Types = _OPERATOR
Token[2].Code[] = []

Что это даст?
Все просто, при синтаксическом анализе мы сразу будем лепить код без хитрых манипуляций и во вторых сразу же можно будет формировать байт-код заголовка на основании предыдущего и последующего кода...
Ну ладно, щас попробую занятся уже формированием CLASS файла...

Последний раз редактировалось satan, 24.09.2008 в 21:32.
(Offline)
 
Ответить с цитированием