Содержание материала

ОБЪЯВЛЕНИЯ

Очевидно на следующем шаге необходимо решить, что мы подразумеваем под объявлением. Я намереваюсь иметь два вида объявлений: переменных и процедур/функций. На верхнем уровне разрешены только глобальные объявления, точно как в C.

Сейчас здесь могут быть только объявления переменных, идентифицируемые по ключевому слову VAR (сокращенно "v").

     <top-level decls> ::= ( <data declaration> )*

     <data declaration> ::= VAR <var-list>

Обратите внимание, что так как имеется только один тип переменных, нет необходимости объявлять этот тип. Позднее, для полной версии KISS, мы сможем легко добавить описание типа.

Процедура Prog становится:

Code:

{  Parse and Translate a Program }

procedure Prog;

begin

   Match('p');

   Header;

   TopDecls;

   Main;

   Match('.');

end;

 

Теперь добавьте две новые процедуры:

 

{ Process a Data Declaration }

procedure Decl;

begin

   Match('v');

   GetChar;

end;

 

{ Parse and Translate Global Declarations }

procedure TopDecls;

begin

   while Look <> 'b' do

      case Look of

        'v': Decl;

      else Abort('Unrecognized Keyword ''' + Look + '''');

      end;

end;

 
 

 

Заметьте, что на данный момент Decl - просто заглушка. Она не генерирует никакого кода и не обрабатывает список... каждая переменная должна быть в отдельном утверждении VAR.

ОК, теперь у нас может быть любое число объявлений данных, каждое начинается с "v" вместо VAR, перед блоком BEGIN. Попробуйте несколько вариантов и посмотрите, что происходит.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить