Другие языки программирования и технологии
C++, синтаксический анализатор,парсер.
Доброго времени суток!. В книге Б.Страуструпа "Язык программирования С++" столкнулся с проблемой. Всё что я читал казалось элементарным т.к. уже был знаком с основами С++. Но так было до 153 страницы. В разделе 6.1. в главе "выражения и операторы" предлагалось написать калькулятор. И вот после этого предложения моё ощущение полного понямания материала закончилось: "наш калькулятор состоит из четырёх частей -синтаксического анализатора или парсера, функции ввода, таблицы символов и управляющей программы. Синтаксический анализатор: вот формальная грамматика программы-калькулятора: Program: END expr_list END expr_list: expression + term expression - term ...." и так далее. Честно-я практические ничего не понял. В интернете ничего не нашёл . Кто может мне или поподробнее объяснить что это такое или дать мне какую-нибуть ссылку куда-нибуть чтоб там мне сказали что это. Пытался на википедии ввести "синтаксический анализатор" так там меня ещё сильней запутали. Подскажите 14-летнему программеру ! спасибо за внимание.
а разгадка одна: книжонка трупа страуса для четырнадцателетних программеров не предназначена.
формальными грамматиками занимется одноимённый раздел дискретной математики, а основы построения компиляторов и парсеров достаточно внятно излагают товарищи ахо, сети и ульман (далеко не только они, конечно, но их труды считаются классическим getting started).
языки описываются грамматиками - метаязыками, задающими синтаксис. элементы грамматики бывают двух видов: терминалы и нетерминалы, которые обединяются в продукции, а сама грамматика, в свою очередь, характеризуется начальным нетерминалом.
в конкретно вашем случае, язык состоит из последовательности выражений и слова END. выражение, в свою очередь, может быть запиано как "что-то" + "что-то", "что-то" - "что-то" и.. . а дальше вы не написали.
по грамматике описывается структура абстрактного синтаксического дерева (набор типов, обобщённых базовым типом "выражение") и автомат, строящий такое дерево из текста.
так вот: каким образом вы полагаете увидеть весь этот матан разжёванным и втиснутым в объём и формат ответа на мейлсру - я в душе не чаю.
замечу только, что существуют программные интрументы, генерирующие анализаторы по формальным грамматикам, записанным в тои или иной форме (PEG, BNF и т. д.) , однако подавляющее большинство компиляторов и интерпретаторов компьютерных языков всё-таки написано вручную, с использованием ряда промежуточных этапов, таких как лексический анализ и препарзинг: сгенерированный анализатор порождает проблемы при диагностике синтаксических и семантических ошибок в том смысле, что выводить внятные сообщения о них обычно нереально.
формальными грамматиками занимется одноимённый раздел дискретной математики, а основы построения компиляторов и парсеров достаточно внятно излагают товарищи ахо, сети и ульман (далеко не только они, конечно, но их труды считаются классическим getting started).
языки описываются грамматиками - метаязыками, задающими синтаксис. элементы грамматики бывают двух видов: терминалы и нетерминалы, которые обединяются в продукции, а сама грамматика, в свою очередь, характеризуется начальным нетерминалом.
в конкретно вашем случае, язык состоит из последовательности выражений и слова END. выражение, в свою очередь, может быть запиано как "что-то" + "что-то", "что-то" - "что-то" и.. . а дальше вы не написали.
по грамматике описывается структура абстрактного синтаксического дерева (набор типов, обобщённых базовым типом "выражение") и автомат, строящий такое дерево из текста.
так вот: каким образом вы полагаете увидеть весь этот матан разжёванным и втиснутым в объём и формат ответа на мейлсру - я в душе не чаю.
замечу только, что существуют программные интрументы, генерирующие анализаторы по формальным грамматикам, записанным в тои или иной форме (PEG, BNF и т. д.) , однако подавляющее большинство компиляторов и интерпретаторов компьютерных языков всё-таки написано вручную, с использованием ряда промежуточных этапов, таких как лексический анализ и препарзинг: сгенерированный анализатор порождает проблемы при диагностике синтаксических и семантических ошибок в том смысле, что выводить внятные сообщения о них обычно нереально.
Это калькулятор не как настольный, где циферку набил, плюсик тыркнул, вторую цыферку и полсе "равно" получаешь ответ. Он подразумевает, что пишешь сразу все выражение, а потом давишь считать и он разделяет его на отдельные операции, считает и сразу выдает готовый ответ. Чтобы разобрать твое выражение и нужен анализатор
Похожие вопросы
- Отложите синтаксический анализ JavaScript
- На каких ЯП пишутся парсеры числовых данных с сайтов?
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.
- Помогите срочно C#
- Помогите исправить ошибку в программе (c++).
- Зачем нужен C++, если есть C?
- Ещё тупой вопрос по C++ :)
- Проверти правильность программы на C++
- Почему многие отдают предпочтение C++ а не C# ?
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?