Книга: Давайте создадим компилятор!
Расширение
Расширение
Чтобы расширить компилятор мы должны просто работать с возможностями языка последовательно. Я хочу начать с пустой процедуры, которая ничего не делает, затем добавлять детали в пошаговом режиме. Давайте начнем с обработки блока в соответствии с его PDL выше. Мы можем сделать это в два этапа. Сначала добавьте пустую процедуру:
{–}
{ Parse and Translate a Pascal Block }
procedure DoBlock(Name: char);
begin
end;
{–}
и измените Prog следующим образом:
{–}
{ Parse and Translate A Program }
procedure Prog;
var Name: char;
begin
Match('p');
Name := GetName;
Prolog;
DoBlock(Name);
Match('.');
Epilog(Name);
end;
{–}
Это конечно не должно изменить поведения программы, и не меняет. Но сейчас определение Prog закончено и мы можем перейти к расширению DoBlock. Это получается прямо из его БНФ определения:
{–}
{ Parse and Translate a Pascal Block }
procedure DoBlock(Name: char);
begin
Declarations;
PostLabel(Name);
Statements;
end;
{–}
Процедура PostLabel была определена в главе по ветвлениям. Скопируйте ее в вашу копию Cradle.
Я возможно должен объяснить причину вставки метки. Это имеет отношение к работе SK*DOS. В отличие от некоторых других ОС, SK*DOS позволяет точке входа в основную программу находиться в любом месте программы. Все, что вы должны сделать, это дать этой точке имя. Вызов PostLabel помещает это имя как раз перед первым выполнимым утверждением в основной программе. Как SK*DOS узнает какая из множества меток является точкой входа, спросите вы? Та, которая соответствует утверждению END в конце программы.
Теперь нам нужны заглушки для процедур Declarations и Statements. Сделайте их пустыми процедурами как мы делали это раньше.
Программа все еще делает то же самое? Тогда мы можем перейти к следующему этапу.
- Рекомендуемое расширение для файлов баз данных - *.ib
- Расширение механизма событий
- 24.1. Расширение возможностей Панели задач
- Что такое расширение файла? Откуда Windows знает, какой программой открывать файл?
- Как узнать, что обозначает неизвестное расширение файла?
- На диске появился файл с расширением TMP размером 1 Гбайт. Можно ли его удалять?
- Файл с неизвестным расширением. Как его идентифицировать?
- На установочном диске Windows много файлов с расширением CAB. Что это за файлы?
- 4.9. Расширение прав
- Расширение очереди по приоритету
- 19.9. Расширение библиотеки jQuery с помощью модулей расширений
- Поиск кандидатов на расширение