![]() |
|
Модераторы: bsa |
![]()
|
|
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Привет форумчане!
У меня такой вопрос. Недавно узнал о том, что существуют такие вот формальные грамматики (LL1), прочитал в вики про них. Знаю, что как-то используются при написании компиляторов и анализаторов. Примеры типа конверторов, но не понимаю, чем зачем ? не понимаю, как именно ? И зачем они нужны ? И где ещё их есть необходимость использовать ? Если можно с примерами и по-проще ... Спасибо! |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Можно использовать при написании разного рода парсеров... Есть специальные утилиты (например yacc, bison, antlr), которые генерируют исходный код парсера по описанию грамматики => его не надо писать и отлаживать самому...
-------------------- ![]() |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Скажите, можно ли написать парсер из делфи в Си++ используяю те программы, что вы назвали ? И Если да, то какую именно ?
Спасибо! |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Если бы было можно, такой конвертер кто-нибудь бы написал, и на данном форуме не появлялись бы вопросы "переведите с Delphi на C++" Но перевод из подмножества Delphi в подмножество C++, исключая сложные конструкции, написать можно. |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Я спрашиваю, точнее говоря, как облегчить себе учесть при написании подобных программ с использованием формальной грамматики и таких вот анализаторов грамматики ?
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
использовать AST Добавлено через 3 минуты и 28 секунд хотя...если тебе нужен конвертер только паскаль->C++, то возможно AST не жизненно необходим. Добавлено через 4 минуты и 23 секунды это невероятно сложный труд, ибо Вам нужно в совершенстве знать оба ЯП. |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Так ведь если есть программы, позволяющие создать свой лексический анализатор, то всё не так страшно )) ?
Может кто-нибудь поведать, как конкретно применяются формальны грамматики ? Слышал, что в поисковых системах... типа гугла. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
лексику создаете Вы, а не программы. Добавлено через 54 секунды сферический лось в вакууме |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Считаю, что пока не вижу ответа на вопрос.
Вот в сети, что пишут http://ukman.narod.ru/algorithms.html Но это всё теория. Где же её на практике применяют ? |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Если вопрос в том, где применяются грамматики, ответ: в компиляторах. Обычно не в таком явном виде как ФБН, но в голове держут именно наглядное описание.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
При переводе с Dephi на C++ легко заменить begin end на { }, = на ==, := на = т.д. Чуть посложнее развернуть with (нужно найти внутри with обращения к полям объекта with и добавить в код C++ указатель на объект - при обратном переводе этот with останется развёнутым.
Параметры в Паскале складывются в стек начиная с первого, в C++ начиная с последнего, иногда это важно и при переводе нужно до вызова функции вычислить значения параметров в локальные переменные, но не делать же это всегда. Что делать с вложенными функциями? Аналога в C++ нет. При обратном переводе - в Delphi нет множественного наследования. При вызове из констрктора/деструктора виртуального метода Delphi и C++ работают по разному - тут даже возникают сложности даже не в переводе, а когда программист C++Builder пишет производный класс от класса, написанного на Delphi. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
math64, Спасибо за ответ!
xvr, обязательно посмотрю, спасибо! |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
лямбда А вообще-то алгоритм перевода довольно простой: 1. Понять, что делает дельфийская программа 2. Найти в гугле её аналог на Си++ -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
||||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Автоматически перевести конечно можно, но при этом код C++ скорее всего будет малочеловекочитабелен... По сути это будет не полноценный перевод, который может сделать человек, а просто компиляция с С++ в качестве целевого языка вместо маш. кодов какой-либо платформы... Это примерно как в Google Web Toolkit где происходит компиляция из Java в JavaScript...
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |