Как использовать полное имя в операторе переключения для удобства чтения?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать полное имя в операторе переключения для удобства чтения?

Сообщение Anonymous »

Я все еще новичок в C++ и сейчас читаю книгу Бьярна Страуструпа «Принципы и практика использования C++».
В качестве упражнения я пишу лексер и синтаксический анализатор для терминального калькулятора. Анализатор определяет тип отдельного символа в строке, представляющей выражение, и присваивает токену некоторое значение типа.
Ниже приведен фрагмент функции, определяющей тип (я это сделал не включать всю функцию или все случаи, чтобы сделать код короче):

Код: Выделить всё

switch(c)
{
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9': case '.':
return 'n'; // 'n' for number

case '*': case '/':
return 'm';     // m for multiplication or division

case '(': case ')':
return 'p'; // p for parenthesis

case ' ':   // whitespace
return 'w';

default:
throw std::invalid_argument("Invalid token: A non-valid character was passed to determineKind");
}
Причина, по которой я использую символы для представления типов токенов, заключается в том, что позже я могу использовать простые операторы switch, в отличие от менее читаемых операторов if со строками, представляющими виды.
Но в то же время 'n', 'm', 'p' и 'w' являются магическими константами, что делает код внутри парсера снова менее читабельным.
Есть ли способ использовать операторы переключателя с полными именами, например «число», «пробелы» и «круглые скобки», чтобы все было проще?

Подробнее здесь: https://stackoverflow.com/questions/784 ... readabilty
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»