Книга: Давайте создадим компилятор!
Присваивания
Присваивания
Пока мы здесь, мы могли бы также написать код для работы с операциями присваивания. Этот код должен только запомнить имя конечной переменной, где мы должны сохранить результат выражения, вызвать Expression, затем сохранить число. Процедура показана дальше:
{–}
{ Parse and Translate an Assignment Statement }
procedure Assignment;
var Name: string;
begin
Name := GetName;
Match('=');
Expression;
StoreVariable(Name);
end;
{–}
Присваивание вызывает еще одну подпрограмму генерации кода:
{–}
{ 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>
- Операторы присваивания
- 4.1.2. Арифметические операторы присваивания
- Попытка присваивания
- Правильное использование попытки присваивания
- Операции присваивания
- Типы, характеризуемые значениями, ссылочные типы и оператор присваивания
- Оператор присваивания
- 4.11. Выражения присваивания
- СУ-перевод для оператора присваивания
- Операторы присваивания в Python:
- 2.10 Операторы и выражения присваивания
- A7.17. Выражения присваивания