Форум программистов, компьютерный форум, киберфорум
Мат. логика и множества
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10

Формальная грамматика

01.03.2016, 21:21. Показов 769. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Админы перенесите тему, пожалуйста, если я не совсем по адресу

Имею грамматику в БНФ:

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
E \to T | E '+' T<br />
<br />
T \to A | T '*' A<br />
<br />
A \to NUMBER | '(' E ')'<br />
Построил по ней иерархию классов.Благополучно строю синтаксическое дерево.
(Считаю значения, вывожу строковые представления. В общем как надо объекты создаются)
А теперь такая проблема.
Как раскрыть скобки ? (Всмысле не folding)

Например : (1 + 2)*(4 + 5) ~ 1*4 + 2*4 + 1*5 + 2*5
Хочется иметь метод : E E::getWithoutParentheses();
которая мне вернет ,древовидную структуру из той же грамматики только без скобок.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2016, 21:21
Ответы с готовыми решениями:

Формальная арифметика
Доброго времени суток)...задание в общем такое доказать теоремы теории: для любых термов t,r,s следующие теоремы яв-ся теоремами теории...

Формальная система. В тупике
A\supset НеНе A 1. A- гипотеза 2. A\supset (Не A\supset A) Аксиома 1 3. (Не A\supset A) МР 1,2 4. (Не A\supset A)\supset (Не...

Формальная грамматика
Товарищи программисты, помогите написать на С++ программу которая б проверяла грамматику. Для примера: на вход поступает грамматика вида: ...

5
2800 / 1846 / 202
Регистрация: 05.06.2011
Сообщений: 5,358
02.03.2016, 02:22
Ну и в чём конкретно проблема?
0
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
02.03.2016, 06:41  [ТС]
iifat, Допустим есть метод toString();

Это просто , конкатенация того, что есть в под-деревьях :

C++ Скопировано
1
2
3
4
5
6
class AbstractE {
   virtual String toString() = 0;
}
class AbstractA() {
  virtual String toString() = 0;
}
А далее есть объект
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
class ParenthsizedE:
  public AbstarctA
{
   AbstarctE e;
public:
   ParenthsizedE(AbstarctE *_e): e(_e) {}
   virtual String toString() {
      return String("(") + e->toString() + String(")");
   }
}
Тут просто, а в случае с раскрытием скобок ?

Например в том же объекте ParenthsizedE сказать мол, надо раскрыться

Добавлено через 7 минут
Предпологаю, что обьекту хранящему выражение в скобках необходимо передовать уже раскрытое выражение из над-дерева
0
2800 / 1846 / 202
Регистрация: 05.06.2011
Сообщений: 5,358
06.03.2016, 07:56
Не о том, по-моему, говоришь. Есть две задачи: раскрытие скобок и генерация строки. Смешивать их не стоит. Дело твоё, конечно, но практика порочная.
Генерация строки генерирует строку по дереву. Честно и тупо генерирует.
Раскрытие скобок раскрывает скобки. Преобразует дерево.
1
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
06.03.2016, 17:09  [ТС]
Цитата Сообщение от iifat Посмотреть сообщение
Не о том, по-моему, говоришь.
да, вы правы
пример явно не в ту степь
мне нужно реструктурировать дерево, ну или возвращать новое но другой структуры.

Получается это у меня уже будет несколько другая грамматика без скобок, а это уже компиляцией попахивает .
Как мне показали в другой теме(я пока не совсем прочувствовал, все суть показанного),
но там все базируется на списке, а именно запоминаются узлы и т.д.

Возможно есть какой-то более общий метод преобразования одной грамматики в другую, более mathematic-based так сказать.
0
2800 / 1846 / 202
Регистрация: 05.06.2011
Сообщений: 5,358
07.03.2016, 10:20
Цитата Сообщение от Qazan Посмотреть сообщение
мне нужно реструктурировать дерево, ну или возвращать новое но другой структуры
Именно.
Цитата Сообщение от Qazan Посмотреть сообщение
у меня уже будет несколько другая грамматика без скобок, а это уже компиляцией попахивает
Ну почему ж, в данной грамматике вполне можно построить как выражение со скобками, так и без таковых. А компиляцией — разумеется, попахивает. Говоря точнее, это относится к машинно-независимой оптимизации — различные преобразования дерева разбора программы.
Цитата Сообщение от Qazan Посмотреть сообщение
там все базируется на списке, а именно запоминаются узлы
Это уже технические подробности, не имеющие пока отношения к задаче. Тебе нужно выбрать представление для деревьев разбора, сформулировать задачу в терминах выбранного представления и, наконец, решить Только и всего
Цитата Сообщение от Qazan Посмотреть сообщение
Возможно есть какой-то более общий метод преобразования одной грамматики в другую
Не знаю такого и сильно сомневаюсь в существовании.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2016, 10:20
Помогаю со студенческими работами здесь

Формальная грамматика
Пишу программу, проверяющую введенный код на языке Pascal на наличие ошибок. Дело в том, что я не знаю Pascal, сам программирую на C++....

Формальная грамматика
Всем привет Разработать программное средство, реализующее следующие функции: 1) ввод произвольной формальной грамматики с...

Формальная грамматика с простыми числами!
Всем привет! Есть задание, я так понял что оно с подвохом уже. Нужно создать формальную грамматику где будет получаться язык: ...

Формальная постановка для игры крестики и нолики
Доброго времени суток. Написал игру крестики и нолики размерностью 4х4. Нужно написать к этой игре формалку, а я понятия даже не имею о том...

Исчисление предикатов первого порядка как формальная система
Друзья, помогите доказать следующие утверждение средствами ФС: Ни один студент не приобретает с рук подержанный магнитофон.Некоторые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Создаем Telegram бот на TypeScript с grammY
run.dev 05.04.2025
Одна из его самых сильных сторон Telegram — это интеграция ботов прямо в экосистему приложения. В отличие от многих других платформ, он предоставляет разработчикам мощный API, позволяющий создавать. . .
Паттерны распределённых транзакций в Event-Driven микросервисах
ArchitectMsa 05.04.2025
Современные программные системы всё чаще проектируются как совокупность взаимодействующих микросервисов. И хотя такой подход даёт множество преимуществ — масштабируемость, гибкость, устойчивость к. . .
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер