Просто используйте lodash для распаковки карты и sortBy первое значение пары и zip снова вернет отсортированный ключ.
Если вы хотите, чтобы параметр сортировки изменил значение пары на 1 вместо 0
var o = { 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' };
console.log(_(o).toPairs().sortBy(0).fromPairs().value())
Возможность, которую можно рассмотреть, если LL-анализатор в порядке Вам, состоит в том, чтобы дать ANTLR попытку, это может генерировать Python также (на самом деле, это - LL (*), как они называют его, * обозначает количество предвидения, с которым это может справиться).
PySec является другим одноместным синтаксическим анализатором, я не знаю много об этом, но на это стоит посмотреть здесь
Я полагаю, что pyparsing основан на тех же принципах как парсек.
ANTLR является большим и обладает дополнительным преимуществом работы через несколько языков.
Существует ANTLR, который является LL (*), существует PyParsing, который является большим количеством объектной товарищеской встречи и является видом подобных DSL, и затем там Анализирует, который похож на Каменный столб OCAML.
Ничто не предотвращает Вас для отклонения Вашего синтаксического анализатора от "контекста свободный" путь с помощью СГИБА. Можно передать информацию лексическому анализатору во время парсинга и таким образом достигнуть полной гибкости. Я вполне уверен, что можно проанализировать что-либо, что Вы хотите со СГИБОМ этот путь.
Для практического примера рассмотрите - это - синтаксический анализатор для ANSI C записанный в Python со СГИБОМ. Это решает классическое определение типа C - проблема идентификатора (который делает грамматику C не контекстно-зависимой) путем заполнения таблицы символов в синтаксическом анализаторе, который используется в лексическом анализаторе для разрешения имен символа или как типов или как нет.