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