Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Применение формальных грамматик, Объясните на пальцах 
V
    Опции темы
TupDub
Дата 7.10.2011, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Привет форумчане!
У меня такой вопрос. Недавно узнал о том, что существуют такие вот формальные грамматики (LL1), прочитал в вики про них.
Знаю, что как-то используются при написании компиляторов и анализаторов. 
Примеры типа конверторов, но не понимаю, чем зачем ? 
не понимаю, как именно ? И зачем они нужны ? И где ещё их есть необходимость использовать ? 

Если можно с примерами и по-проще ... 

Спасибо!

PM   Вверх
kosmonaFFFt
Дата 7.10.2011, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Можно использовать при написании разного рода парсеров... Есть специальные утилиты (например yacc, bison, antlr), которые генерируют исходный код парсера по описанию грамматики => его не надо писать и отлаживать самому...


--------------------
user posted image
PM MAIL ICQ   Вверх
TupDub
Дата 7.10.2011, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Скажите, можно ли написать парсер из делфи в Си++ используяю те программы, что вы назвали ? И Если да, то какую именно ? 
Спасибо!
PM   Вверх
math64
Дата 7.10.2011, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(TupDub @  7.10.2011,  09:12 Найти цитируемый пост)
можно ли написать парсер из делфи в Си++

Если бы было можно, такой конвертер кто-нибудь бы написал, и на данном форуме не появлялись бы вопросы "переведите с Delphi на C++"
Но перевод из подмножества Delphi в подмножество C++, исключая сложные конструкции, написать можно.

PM   Вверх
TupDub
Дата 7.10.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Я спрашиваю, точнее говоря, как облегчить себе учесть при написании подобных программ с использованием формальной грамматики и таких вот анализаторов грамматики ? 
PM   Вверх
boostcoder
Дата 7.10.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(TupDub @  7.10.2011,  11:02 Найти цитируемый пост)
как облегчить себе учесть

использовать AST

Добавлено через 3 минуты и 28 секунд
хотя...если тебе нужен конвертер только паскаль->C++, то возможно AST не жизненно необходим.

Добавлено через 4 минуты и 23 секунды
это невероятно сложный труд, ибо Вам нужно в совершенстве знать оба ЯП.
PM WWW   Вверх
TupDub
Дата 7.10.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Так ведь если есть программы, позволяющие создать свой лексический анализатор, то всё не так страшно )) ? 

Может кто-нибудь поведать, как конкретно применяются формальны грамматики ? Слышал, что в поисковых системах... типа гугла. 

PM   Вверх
boostcoder
Дата 7.10.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(TupDub @  7.10.2011,  11:48 Найти цитируемый пост)
программы, позволяющие создать свой лексический анализатор

лексику создаете Вы, а не программы.

Добавлено через 54 секунды
Цитата(TupDub @  7.10.2011,  11:48 Найти цитируемый пост)
как конкретно применяются формальны грамматики

сферический лось в вакууме smile 
PM WWW   Вверх
TupDub
Дата 7.10.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Считаю, что пока не вижу ответа на вопрос.
Вот в сети, что пишут http://ukman.narod.ru/algorithms.html
Но это всё теория. Где же её на практике применяют ? 

PM   Вверх
newbee
Дата 7.10.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



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


--------------------
You're face to face
With man who sold the world
PM   Вверх
math64
Дата 7.10.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



При переводе с  Dephi на C++ легко заменить begin end на { }, = на ==, := на = т.д. Чуть посложнее развернуть with (нужно найти внутри with обращения к полям объекта with и добавить в код C++ указатель на объект - при обратном переводе этот with останется развёнутым.
Параметры в Паскале складывются в стек начиная с первого, в C++ начиная с последнего, иногда это важно и при переводе нужно до вызова функции вычислить значения параметров в локальные переменные, но не делать же это всегда.
Что делать с вложенными функциями? Аналога в C++ нет.
При обратном переводе - в Delphi нет множественного наследования.
При вызове из констрктора/деструктора виртуального метода Delphi и C++ работают по разному - тут даже возникают сложности даже не в переводе, а когда программист C++Builder пишет производный класс от класса, написанного на Delphi.

PM   Вверх
xvr
Дата 7.10.2011, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(TupDub @  7.10.2011,  08:24 Найти цитируемый пост)
И зачем они нужны ?

В доках в bison'у есть пример калькулятора, сделанного с применением bison'а. На нем написана грамматика выражения, а он соответственно генерит текст парсера на С

PM MAIL   Вверх
TupDub
Дата 7.10.2011, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



math64,  Спасибо за ответ! 


xvr,  обязательно посмотрю, спасибо! 
PM   Вверх
borisbn
Дата 7.10.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(math64 @  7.10.2011,  13:38 Найти цитируемый пост)
Что делать с вложенными функциями? Аналога в C++ нет.

лямбда smile

А вообще-то алгоритм перевода довольно простой:
1. Понять, что делает дельфийская программа
2. Найти в гугле её аналог на Си++
 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 7.10.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(borisbn @  7.10.2011,  14:55 Найти цитируемый пост)
1. Понять, что делает дельфийская программа

Когда переводишь вручную понять и найти чем заменить чаще всего просто, но речь идёт об автоматическом переводе. 

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.