Ruby: Как программировать разные "состояния" без слишком большого количества if-statements/flags?

Чтобы помочь дать некоторый опыт, я пытаюсь запрограммировать синтаксический анализатор, который будет вести длинный файл по очереди.

В соответствии с информацией, которую он получает, программа будет устанавливать разные состояния. Подумайте об этом как о достижении определенной "контрольной точки" в файле и установлении на нем флага → true. Есть много этих "контрольных точек", которые я пытаюсь отслеживать, но я знаю, что использование флагов и if-statements для этого в конечном итоге затруднит мою жизнь в долгосрочной перспективе.

пример ситуации:

**State 1 (requires the following variables to be set to true):**

foo -> true, bar -> true, red -> false

**State 2:**

requires state 1 to be fulfilled, as well as, blue -> true, green-> false, yellow -> true

**State 3:**

requires states 1/2 to be fulfilled, along with added variables, so on and so forth.

Как вы можете видеть, эти флаги/состояния будут постоянно расти из-за зависимости между собой.

Надеюсь, все это имело смысл. Каковы некоторые советы/стратегии, которые я могу использовать, чтобы запрограммировать все это чисто?

1 ответ

Я предполагаю, что у вас нет контекстной грамматики?

Если у вас есть контекстная грамматика, вы можете использовать генератор синтаксического анализа без контекста; существует множество инструментов для создания парсера для контекстно-свободной грамматики. Ключевое слово для поиска: генератор парсера.

Как правило, самый простой способ анализа контекстно-зависимой грамматики состоит в создании парсера с генератором синтаксического анализатора, который может анализировать контекстно-свободный надмножество фактической грамматики, а затем выполнять второй этап синтаксического анализа, чтобы выполнять проверки, чувствительные к контексту.

licensed under cc by-sa 3.0 with attribution.