Комментарий
Я кстати недавно задумывалсо об обработке естественного языка, но в несколько другом аспекте (поводом послужил "парсинг" фразы состоящий в основном из мата :)).
Одним из отличий натурального языка от компьютерных является наличие "откатов". Т.е. добавление одного слова к валидному предложению может существенно поменять его синтаксическую структуру, что для компьютерного парсера означает необходимость "отката" то бишь признать уже запаршенную часть ошибочной и попробовать другой вариант.
Традиционно откаты считаются нежелательными в формальных языках. Это связано с тем что раньше памяти у компов было мало, ну и процы были тормозные. Так что откатные грамматики будут жрать существенно больше ресурсов. Кроме того в формальных языках, синтаксическая структура предложений может быть весьма и весьма разветвленной (спагетти код к примеру). В натуральном языке, особенно разговорном сложные ветвистые структуры неприемлимы - человек их не поймет. Уж моск точно вскипит. Так что цена отката в натуральном языке не велика, ибо граниченно сравнительно короткой длинной понимабельного предложения.
Кроме того, для формальных языков нетрудно подправить грамматику так чтобы для нее можно было (механически) построить эффективный парсер, работающий за линейное время от входа, ну и с небольшими требованиями к памяти (сильно меньше длинны входа, хотя формально и не ограниченно). При этом компьютер непоперхнется прожевать весьма и весьма разветвленные предложения - главное чтобы памяти хватило.
Разумеется, выразительные возможности грамматик при этом сокращаются, но того что есть вполне хватает.
Последнее время наметился отход от традиции избегать откаты. В частности комбинаторы парсеров (OMeta из этой же серии) часто реализуют с помощью откатов. Посему парсернокомбинаторный подход получается проще и выразительнее. А цена на данный момент для современного железа вполне приемлима - в худшем случае потребуется память пропорциональная длинне входа. Ибо обычно парсеры запоминают (memoize) пропаршенную структуру, так что при откате и последующем накате, берут значения их кэша, а не перевычисляют. Таким образом, время остается примерно пропорционально длине, хотя в каких-то случаях при откатных лавинах может быть и хуже. На практике, это не так критично, ибо плохопонимабельный код для парсера надо специально конструировать, человек такой писать не будет (естественно имеется в виду отлаженный парсер).
Ну дык вот. В этом придании "естественности" формальным языкам мне видится большой резерв повышения эффективности труда программеров. Т.е. можно делать более выразительные языки, хотя возможно не все из них компилятор сумеет понять. Но это не такая уж и проблема ибо люди тоже далеко не все фразы способны понять :).
Вобщем официально заявленная неполнота реализации языка (которая де-факто все равно всегда есть) - это весьма интересное и передовое развитие языков программирования. По крайней мере, практических :). Для computer science целей строгие формальные языки думаю все-таки останутся приоритетом.