Мне нужно построить диалоговую систему, аналогичную IVR, используемой в колл-центрах. Моя система не основана на телефоне, но диалог похож. Что-то вроде
System: "Main menu: Enter [1] for menu1, [2] for menu2"
User: [1]
System: "menu1: enter [1] for apples, [2] for oranges, [3] for main menu"
User: [7]
System: "What??"
System: "menu1: enter [1] for apples, [2] for oranges, [3] for main menu"
User: [2]
... and so on
Я хочу иметь хорошее декларативное описание всех возможных опций и хороший способ пробежаться по этому дереву, руководствуясь пользовательским вводом.
Уже рассмотрено: сгенерированный ANTLR лексер / парсер (кажется, излишним), конечный автомат на основе SCXML (кажется, что могут быть объявлены только переходы, остальные должны быть кодированы)