Если цель состоит в том, чтобы проанализировать подобный оболочке язык (который, по-видимому, является реальной целью проектирования shlex), тогда написание грамматики в LPeg , как указывает lhf, , вероятно, является правильным ответом , Однако не так просто написать грамматику, которая полностью реализует мешанину многослойных правил цитирования, которым фактически следуют оболочки. Если вы не собираетесь правильно анализировать все действительные сценарии /bin/sh
(или, что еще хуже, csh
), написать простую грамматику будет просто.
Если цель на самом деле - создать разумный «маленький язык» для файлов конфигурации или сценариев приложения, то я бы предположил, что сам Lua уже очень близок к тому, чтобы быть этим языком. Первоначально он был разработан с учетом описания данных, и его синтаксический анализатор достаточно искусен в обработке даже довольно больших объявлений данных. См. раздел 10.1 PiL для одного примера того, как использовать Lua таким образом. Более поздняя глава 25 описывает интеграцию Lua с более крупным приложением для конкретного случая использования конфигурации и демонстрирует ряд подходов.