Конечно, я постараюсь помочь вам.
Ошибки в коде могут быть различные: синтаксические, логические, семантические или ошибки времени выполнения. Чтобы понять, где именно у вас возникают трудности, вам нужно предоставить конкретные примеры кода или конкретные вопросы. Таким образом, я смогу дать вам целенаправленный совет.
Что касается примеров кода из книг Страуструпа, где используются рекурсивные спуски и глобальные переменные, обычно такие примеры представляют собой упрощенные парсеры или интерпретаторы. Принцип рекурсивного спуска заключается в том, что каждая функция соответствует определенному правилу грамматики и вызывает другие функции для проверки подправил. Глобальные переменные часто используются для хранения текущего состояния парсера, например, текущего токена или значения ввода, над которым выполняется работа.
Пример простого парсера с использованием рекурсивного спуска и глобальных переменных может выглядеть примерно так:
```cpp
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
// Глобальная переменная, представляющая текущий символ ввода
char current_char;
// Функция, которая «читает» следующий символ
void get_next_char() {
cin >> noskipws >> current_char;
}
// Предварительные объявления рекурсивных функций
void parse_expression();
void parse_number();
// Парсинг числа
void parse_number() {
while (isdigit(current_char)) {
cout << "Number: " << current_char << endl;
get_next_char();
}
}
// Парсинг выражения
void parse_expression() {
if (isdigit(current_char)) {
parse_number();
} else if (current_char == '(') {
get_next_char(); // Пропустить '('
parse_expression(); // Парсить подвыражение
if (current_char == ')') {
get_next_char(); // Пропустить ')'
} else {
cerr << "Error: expected ')'" << endl;
}
}
// Можно добавить другие правила для операторов, скобок и т.д.
}
int main() {
get_next_char(); // Положить первый символ в current_char
parse_expression(); // Начало разбора
return 0;
}
```
Представленный пример использует рекурсию для парсинга выражений и чисел. Глобальная переменная `current_char` используется для хранения текущего символа, и вызывается функцией `get_next_char` для считывания следующего символа из входного потока.
Если у вас есть конкретный пример кода, который вам нужно проверить, предоставьте его, и я дам более точные рекомендации.