Разбор выражения на лексемы
Рассмотрим подробнее работу функции get_next_lexem().
Функция не принимает никаких параметров. Строка,с записью выражения, используется как глобальная переменная. Помимо нее еще используются глобальные переменные:
- current_position – номер позиции в строке, откуда начинается еще не рассмотренная часть;
- current_lexem_type - в эту переменную функция должна поместить тип обнаруженной лексемы;
- current_lexem_value - в случае если обнаружена лексема типа "число", в эту переменную необходимо поместить его значение;
План разбора строки может быть записан примерно так:
1. Если current_position больше длины строки, current_lexem_type = LT_END
2. Если S[current_position] = '+' (или любой другой знак, в том числе скобка)
current_lexem_type = LT_PLUS (или соответствующее другому знаку значение)
current_position = current_position + 1;
3. Если S[current_position] = цифра, то
- current_lexem_type = LT_NUMBER
- с помощью цикла от current_position вправо нужно найти где закончатся цифры;
- взять этот фрагмент строки, преобразовать в число и поместить в current_lexem_value;
- изменить значение current_position, чтобы он «указывал» на символ, следующий за числом.
4. При желании, здесь можно обработать ситуацию, когда встретился непредвиденный символ, если в задаче не гарантируется корректность данных или пропускать пробелы или другие разделители между лексемами, если они допустимы по условию.
Функция get_next_lexem() не возвращает никаких значений, кроме тех, которые она записывает в глобальные переменные.