Разбор выражения на лексемы

Рассмотрим подробнее работу функции 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() не возвращает никаких значений, кроме тех, которые она записывает в глобальные переменные.

Последнее изменение: Суббота, 15 Август 2020, 02:35