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.
|