Я программировал много лет, но одна задача, которая все еще занимает у меня слишком много времени, - это задать грамматику для синтаксического анализатора, и даже после этого чрезмерного усилия, я никогда не уверен, что грамматика, которую я придумал, хороша ( любой разумной мерой "хорошо").
Я не ожидаю, что существует алгоритм для автоматизации процесса задания грамматики, но я надеюсь, что есть способы структурировать проблему, которые устраняют большую часть догадок и проб и ошибок моего нынешнего подхода.
Моей первой мыслью было прочитать о синтаксических анализаторах, и я сделал кое-что из этого, но все, что я прочитал на эту тему, принимает грамматику как данность (или достаточно тривиальную, чтобы ее можно было определить путем проверки), и фокусируется на проблема перевода этой грамматики в парсер. Меня интересует проблема непосредственно перед тем, как задать грамматику в первую очередь.
Меня в первую очередь интересует проблема определения грамматики, которая формально представляет собой набор конкретных примеров (положительных и отрицательных). Это отличается от проблемы разработки нового синтаксиса . Спасибо Макнейлу за то, что он указал на это различие.
Я никогда по-настоящему не ценил различие между грамматикой и синтаксисом, но теперь, когда я начинаю это видеть, я мог бы уточнить свое первое разъяснение, сказав, что меня в первую очередь интересует проблема определения грамматики, которая будет приводить в исполнение предопределенный синтаксис: просто так получается, что в моем случае основой этого синтаксиса обычно является набор положительных и отрицательных примеров.
Как грамматика указана для парсера? Существует ли книга или справочник, являющийся стандартом де-факто для описания передовых методов, методологий проектирования и другой полезной информации о задании грамматики для анализатора? На каких пунктах, читая о грамматике парсера, я должен сосредоточиться?