Главная arrow Программирование С++ arrow Вывод синтаксических ошибок

Вывод синтаксических ошибок

Если анализатор обнаруживает синтаксическую ошибку, он генерирует исключение типа InterpExc, задающее значение перечислимого типа, соответствующее типу найденной ошибки (другие части интерпретатора Mini С++ также используют класс InterpExc для сообщений об ошибках). Обработчик исключения InterpExc включен в функцию main () — часть основного файла интерпретатора minicpp.cpp, который будет описан позже. Этот обработчик для сообщения об ошибке вызывает функцию sntx_err (), приведенную далее.
// Отображает сообщение об ошибке, void sntx_err (error_jnsg error) {
char *p, *temp; int linecount = 0;
static char *e[]= { "Syntax error", "No expression present", "Not a variable", "Duplicate variable name", "Duplicate function name". "Semicolon expected", "Unbalanced braces", "Function undefined", "Type specifier expected", "Return without call", "Parentheses expected", "While expected", "Closing quote expected", "Division by zero",
" expected (control statements must use blocks)", "Colon expected"
};
// Выводит ошибку и номер строки, cout « "\n" « е[error); p = p_buf;
while(p != prog)    {   // находит номер строки с ошибкой Р++;
if(*р == '\г') { linecount++;
}
}
cout « " in line " « linecount « endl; temp = p;
while(р > p_buf && *р != '\n') р~;
// Отображает ошибочную строку, while(р <= temp) cout « *р++;
cout « endl;
}
Обратите внимание, функция sntx_err () отображает строку, описывающую ошибку и номер строки кода, в которой обнаружена ошибка (он может указывать на строку, следующую за той, в которой ошибка действительно име-'    ла место). Функция также выводит на экран содержимое строки с ошибкой.