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

ПРИСВАИВАНИЯ

Пока мы здесь, мы могли бы также написать код для работы с операциями присваивания. Этот код должен только запомнить имя конечной переменной, где мы должны сохранить результат выражения, вызвать Expression, затем сохранить число. Процедура показана дальше:

Code:

{ Parse and Translate an Assignment Statement }

procedure Assignment;

var Name: string;

begin

 Name := GetName;

 Match('=');

 Expression;

 StoreVariable(Name);

end;

 
 

 

Присваивание вызывает еще одну подпрограмму генерации кода:

Code:

{ Store the Primary Register to a Variable }

procedure StoreVariable(Name: string);

begin

 EmitLn('LEA ' + Name + '(PC),A0');

 EmitLn('MOVE D0,(A0)');

end;

 

 

 

Теперь измените вызов в Main на вызов Assignment и вы должны увидеть полную операцию присваивания, обрабатываемую правильно. Довольно хорошо, не правда ли? И безболезненно также.

В прошлом мы всегда старались показывать БНФ уравнения для определения синтаксиса, который мы разрабатываем. Я не сделал этого здесь и давно пора это сделать.  Вот эти БНФ:

    <factor>      ::= <variable> | <constant> | '(' <expression> ')'

    <signed_term> ::= [<addop>] <term>
    <term>        ::= <factor> (<mulop> <factor>)*
    <expression>  ::= <signed_term> (<addop> <term>)*

    <assignment>  ::= <variable> '=' <expression>

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

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

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

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


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