Разбор грамматики C++
От: mefrill Россия  
Дата: 21.12.04 06:24
Оценка: 37 (10) +3 -1 :)
Здравствуйте, uw, Вы писали:

uw>Тем не менее трудность парсинга без сомнения один из основных минусов C++. Лично я не видел ни одного open-source парсера С++ (написанного на C++) и поддерживающего хотя бы парсинг на уровне сравнимом с наиболее адекватными компиляторами. До следующей фазы компиляции у их разработчиков руки просто не дошли. Основные усилия ушли на парсинг. В OpenC++ парсер рукописный recursive descent + backtracking, для Elsa был специально написан смешанный generalised lr / lr генератор парсеров, FOG парсит суперсет грамматики C++, а затем уже устраняет неоднозначности.

uw>Вся эта работа была проделана ими зря !?

Трудность синтаксического анализа действительно присутствует. Но просто потому, что Си++ не укладывается в LR(k) грамматику. А парсеры типа Bison как раз на такой грамматике и работают. Поэтому начинаются извращения, выраженные в бесконечных попытках упростить грамматику Си++ чтобы она работала на Bison. Сейчас есть хороший метод разбора, который работает для всех грамматик, без ограничений: алгоритм Томиты, еще называемый GLR. Если использовать этот алгоритм, то проблем не возникает. Просто, язык Си++, в отличии от C или C# с Java, это язык следующего поколения, очень похожий на естественные языки. Похожесть заключается в реализации в языке множества различных парадигм, что повышает на порядок сложность языка. Ввиду этой сложности, для упрощения синтаксических конструкций, многие из них имеют многозначную семантику. Это не обязательно выражается в неоднозначности грамматики, но на сложность влияет. Тоже самое присутствует и в человеческих языках, когда для обозначения объектов какой-то новой реальности люди используют старые слова и языковые конструкции по аналогии с какой-нибудь известной областью. Я понимаю, что в наш серенький век, когда в программировании присутствуют мириады ламеров, принцип "чем проще, тем лучше" превалирует надо всем остальным. Но, мне кажется, все-таки необходимо оставить людям отдушину, строем не все хотят ходить.

23.12.04 14:21: Ветка выделена из темы Чем становится C++?
Автор: uw
Дата: 21.12.04
— AndrewVK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.