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

Ребят, да вы не понимаете... Ето пока наброски, потом, когда перейдем к синтаксическому анализатору каждый сможет свой язык прикрутить, вплоть до выдуманого. Просто я сейчас иду методом рекурсивного подъёма, а не как в классической книге дракона метод рекурсивного спуска. Почему? Да потому что виден сразу результат работы, во вторых можно проверять на ходу работоспособность и в третьих, когда подходишь уже к оформлению языка (на каком будет проходить в принципе программирование) у тебя уже все готово, то есть остаётся лишь придумать или взять какой нить язык за основу и вписать его в лекс. анализ...
Просто сейчас я пытаюсь объяснить структуру БАЙТ-КОДА который будет на выходе, попросту CLASS файл, затем у нас пойдут простейшие функции, которые переводят строки в этот самый байт код... Но, по структуре CLASS файла можно понять, что он состоит из нескольких секций и в основном самая большая из них - это Заголовок файла.
Потом лексический анализатор пробежится по строчкам кода (причом пробежиться он по правилам заданным нами) и если не встретит ошибки отдаст строку на растерзание синтаксическому анализатору... Вот в кратце как работает эта связка на примере строки
class
HelloWorld{

Пусть у нас будет L– лексический анализатор а S– синтаксический
L – встретил “class отдает S-> “class
S – возвращает L<-_CLASSES то есть “class” у нас структура
Ошибки нет, записываем в массив с номером N+1 07 00 {номер N}
L – далее должно быть название строка UTF8
L – следующийтокенHelloWorldотдает S->“HelloWorld
S – возвращает L<-_UTF8 то есть строка
Lсверяет UTF8 == _UTF8 ошибки нет
Записываем в массив с номером Nпоследовательность байт строки “HelloWorld” или
48 65 6C 6C 6F 57 6F 72 6C 64
И так в цикле и рекурсивно...
Тоесть у нас одна рекурсивная функция будет отдавать три варианта
1.Ошибки нет правила совпадают
2.Ошибки нет правила не совпадают
3.Ошибка
В первом случае все нормально и пишется код, в третьем выводится ошибка а во втором управление передается точно такой же рекурсивной функции, которая разберёт уже другую строку, например выражение, и т.д...
(Offline)
 
Ответить с цитированием