Line data Source code
1 : #include <iostream> 2 : #include "common/obstacle.hpp" 3 : 4 34 : void Obstacle::describe(void) const { 5 34 : switch (r) { 6 0 : case PANIC: 7 0 : std::cout << "Компилятор в панике." << std::endl; 8 0 : break; 9 0 : case PROG_START: expected("program"); break; 10 0 : case PROG_OPENBR: expected("{"); break; 11 1 : case FUNC_OPENBR: expected("("); break; 12 1 : case FUNC_CLOSEBR: expected(")"); break; 13 0 : case OP_CLOSEBR: 14 0 : case PROG_CLOSEBR: expected("}"); break; 15 0 : case SEMICOLON: expected(";"); break; 16 0 : case BAD_PARAMS_OPBR: expected("("); break; 17 0 : case BAD_PARAMS_CLBR: 18 0 : case EXPR_CLOSEBR: expected(")"); break; 19 1 : case BAD_INT: expected("целое число"); break; 20 1 : case BAD_REAL: expected("вещественное число"); break; 21 1 : case BAD_BOOL: expected("true или false"); break; 22 1 : case WRONG_SCOPE: 23 1 : std::cout << "Неизвестная область программы." << std::endl; 24 1 : break; 25 1 : case BAD_IDENT: 26 1 : std::cout << "Плохой идентификатор." << std::endl; 27 1 : break; 28 1 : case BAD_STRING: 29 1 : std::cout << "Плохая строка." << std::endl; 30 1 : break; 31 0 : case TYPE_UNKNOWN: 32 0 : std::cout << "Неизвестный тип." << std::endl; 33 0 : break; 34 3 : case EXPR_BAD_TYPE: 35 3 : std::cout << "Неподходящий тип выражения." << std::endl; 36 3 : break; 37 0 : case BAD_OPERATOR: 38 0 : std::cout << "Плохой оператор." << std::endl; 39 0 : break; 40 7 : case IDENT_NOT_DEF: 41 7 : std::cout << "Идентификатор не описан." << std::endl; 42 7 : break; 43 1 : case IDENT_DUP: 44 1 : std::cout << "Повторное описание идентификатора." << std::endl; 45 1 : break; 46 3 : case BAD_IF: 47 3 : std::cout << "Выражение должно быть условным." << std::endl; 48 3 : break; 49 0 : case BAD_LABEL: 50 0 : std::cout << "Перемещаться можно только по метке." << std::endl; 51 0 : break; 52 0 : case BAD_EXPR: 53 0 : std::cout << "Неверное выражение." << std::endl; 54 0 : break; 55 1 : case BREAK_OUTSIDE_CYCLE: 56 1 : std::cout << "Break вне цикла." << std::endl; 57 1 : break; 58 1 : case CONTINUE_OUTSIDE_CYCLE: 59 1 : std::cout << "Continue вне цикла." << std::endl; 60 1 : break; 61 0 : case BAD_STRUCT: 62 0 : std::cout << "Плохое описание структуры." << std::endl; 63 0 : break; 64 0 : case STRUCT_UNDEF: 65 0 : std::cout << "Структура не описана." << std::endl; 66 0 : break; 67 0 : case LABEL_OR_IDENT: 68 0 : std::cout << "Этот идентификатор описан не как метка." << std::endl; 69 0 : break; 70 0 : case TOO_MUCH_PARAMS: 71 0 : std::cout << "Слишком много формальных параметров." << std::endl; 72 0 : break; 73 0 : case NOT_CALLABLE: 74 0 : std::cout << "Этот объект нельзя вызвать как функцию." << std::endl; 75 0 : break; 76 0 : case CALLABLE: 77 0 : std::cout << "Нельзя проводить арифметические операции над функцией. Возможно, Вы забыли \"()\"." << std::endl; 78 0 : break; 79 0 : case LACK_PARAMS: 80 0 : std::cout << "Недостаточно параметров." << std::endl; 81 0 : break; 82 1 : case PROCEDURE: 83 1 : std::cout << "Процедуры не поддерживаются." << std::endl; 84 1 : break; 85 1 : case BAD_PARAMS_COUNT: 86 1 : std::cout << "Неверное количество фактических параметров." << std::endl; 87 1 : break; 88 1 : case NO_RETURN: 89 1 : std::cout << "Нет выхода из функции." << std::endl; 90 1 : break; 91 1 : case NO_TYPE: expected("тип функции"); break; 92 1 : case RETURN_TYPE_MISMATCH: 93 1 : std::cout << "Неверный тип возвращаемого параметра." << std::endl; 94 1 : break; 95 1 : case MODIF_WITHOUT_TYPE: 96 1 : std::cout << "Модификатор должен использоваться с типом переменной." << std::endl; 97 1 : break; 98 1 : case BAD_TYPE: 99 1 : std::cout << "Плохой тип." << std::endl; 100 1 : break; 101 1 : case NEED_THREAD_NUMBER: 102 1 : std::cout << "Поток должен иметь свой номер, отделённый двоеточием." << std::endl; 103 1 : break; 104 1 : case NESTED_THREADS: 105 1 : std::cout << "Вложенное описание потоков запрещено." << std::endl; 106 1 : break; 107 1 : case PRIVATE_VAR_IN_THREAD: 108 1 : std::cout << "В потоках можно использовать только общие переменные." << std::endl; 109 1 : break; 110 0 : default: 111 0 : std::cout << "Неизвестная ошибка." << std::endl; 112 0 : break; 113 : } 114 34 : } 115 : 116 6 : void Obstacle::expected(const char * msg) { 117 6 : std::cout << "Ожидалось получить " << msg << '.' << std::endl; 118 6 : }