Слегка изменено оформление лекции 3 по языкам программирования

This commit is contained in:
LeterZP
2026-10-14 21:35:24 +03:00
parent 8d0960ee7f
commit eb374cf32a
@@ -187,7 +187,7 @@ parse_expr()
Опишем все более подробно. `parse_expr()` последовательно разбивает полученную строку на узлы, и только в конце соединяет их в итоговое выражение. Иными словами, он не воспринимает те же символы "2, \*, 3" отдельно друг от друга, он их даже не читает. Вместо этого он получает от `parse_term` сразу готовый узел (2 \* 3) и подсоединяет его к строящемуся дереву.
Тот же разбор математического выражения можно расписать на языке C.
```C
```c
Node *parse_expr(Lexer *lx) {
Node *left = parse_term(lx);
while (peek(lx) == '+' || peek(lx) == '-') {
@@ -227,7 +227,7 @@ Node *parse_factor(Lexer *lx) {
Для реализации таких макроподстановок используются специальные директивы, включая `#include`, `#define`, `#ifdef`, `#ifndef`.
Примером такой ошибки препроцессора может служить следующий код.
```C
```c
#define SQUARE(x) x * x
int a = SQUARE(2 + 3)
@@ -236,7 +236,7 @@ int a = 2 + 3 * 2 + 3 // = 11, а не 25
```
Поэтому при использовании макросов рекомендуется использовать защиту.
```C
```c
#define SQUARE(x) ((x) * (x))
int a = SQUARE(2 + 3)