![]() |
Модераторы: Snowy, Poseidon Страницы: (7) Все « Первая ... 2 3 [4] 5 6 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
TheVoid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 18.6.2009 Репутация: нет Всего: нет |
Это еще когда писал компилятор Паскаля на Делфи, чего-то там со вложенными процедурами не разобрался.
Ну, сейчас-то я примерно понимаю, как это должно выглядеть. |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
можно стэк списков.
Это сообщение отредактировал(а) DEADHUNT - 18.9.2009, 22:43 |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
TheVoid, так для С++ есть стандартизированная грамматика (то о чем я спрашивал раньше), не надо ничего выдумывать.
DEADHUNT, как это вручную сделать компилятор? не понимаю. какими методами. через LR синтаксис вручную сделать нереально. а семантику можно и вручную. |
|||
|
||||
TheVoid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 18.6.2009 Репутация: нет Всего: нет |
Killerman, в учебных целях я занят реализацией ANSI C (см. первый пост). Логично, что
сюда не катит. (Ну если быть откровенным вначале хочу осилить только подмножество Си, поэтому есть смысл грамматику выдумывать самостоятельно). |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
реально, только вначале на листке надо будет составлять автоматные таблицы, а вообще я не говорил про LL/LR, я говорил про http://en.wikipedia.org/wiki/Recursive_descent_parser, не верится посмотри исходникики g++. |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
DEADHUNT, не знаю, там токо 2-ве строчки про этот метод:
A recursive descent parser is a top-down parser built from a set of mutually-recursive procedures (or a non-recursive equivalent) where each such procedure usually implements one of the production rules of the grammar. Thus the structure of the resulting program closely mirrors that of the grammar it recognizes. и все. LR для С++ вручную не получится, так как там таблица будет дето 3000 X 100. если не больше Добавлено через 9 минут и 38 секунд Хотя в принципеесли оптимизировать, может быть и 3000Х20. но это всеравно не для ручной работы Это сообщение отредактировал(а) Killerman - 19.9.2009, 08:24 |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
зато пример парсера есть.
ты хоть понимаешь что такое управляющая LR(1) таблица? строки состояния, столбцы входные аванцепочки. как ты собрался оптимизировать аванцепочки с 100 до 20? ![]() |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
DEADHUNT, я понимаю. имею некоторый опыт. там идет оптимизация терминалов.
TheVoid, все же С++, это не просто цыклы или там списки присвоений. там гемора хватает. хотябы с шаблонами. а ты делаешь не С++ и даже не С. написал бы - хочу создать свой функциональный язык. и все Это сообщение отредактировал(а) Killerman - 19.9.2009, 20:45 |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
терминалы нельзя оптимизировать. например терминалы a-z, A-Z как ты оптимизируешь, A-Z выкинешь? оптимизировать можно путём удаления эквивалентных состояний(у которых одинаковые "ядра" в LALR) и получить столько же состояний сколько в SLR анализаторе. |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
А что такое a-z, A-Z ? это не терминал никакой.
Добавлено через 32 секунды вот почитай. полезная статья http://www.arbinada.com/main/node/54 Добавлено через 4 минуты и 13 секунд кстати по этой ссылке http://en.wikipedia.org/wiki/Recursive_descent_parser написано: Recursive descent parsers are particularly easy to implement in functional languages such as Haskell, Lisp or ML. чето не вижу что оно такое же хорошее для сложный языков |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
A-Z - имелись ввиду как терминальные символы(из них идентификаторы состоят, просто для примера)
S -> aBcd B -> Sa | e в этой грамматике нетерминальные символы {S, B}, терминальные {a, c, d} |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
и вообще в том примере по этой же ссылке грамматика не леворекурсионная. в EBNF форме.
там такие приколы как: S:= S+M не прокатят Добавлено через 1 минуту и 50 секунд
ну здесь конечно никак. |
|||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
||||
|
||||
TheVoid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 18.6.2009 Репутация: нет Всего: нет |
||||
|
||||
DEADHUNT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.11.2008 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Совместные проекты/поиск партнёров" | |
|
Внимание: Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя! Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |