![]() |
|
|
![]()
|
|
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Есть ДКА(детерминированный конечный автомат), собираюсь генерировать из него статический код(я.п. С++ если что).
Кто-нибудь сталкивался с подобной задачей? Что будет оптимальнее - switch, goto или ...? для реализации автомата. Просмотрел сгенерированные файлы bison'а, там используется switch вперемешку с goto, в ANTLR'е только switch(насколько я знаю в java нету goto, зато исключения там встречаются чуть ли не на каждом шагу). Хотелось бы увидеть несложный пример алгоритма построения автомата из ДКА на основе(switch, goto или ...). Это сообщение отредактировал(а) rudvil - 12.3.2011, 16:46 --------------------
xor |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Лучше switch.
Если получится путанная система, придётся юзать goto. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Лучше всего каждый раз проверять количество переходов. Если оно больше какого-то n, лучше использовать look-up table. То есть записать адреса переходов в таблицу по индексу-байту: если на входе байт b, то идем в look-up table[b]. Switch плох тем, что branch prediction процессора будет почти всегда miss-ить тем самым снижая производительность.
antlr работает в два раза медленнее flex-а. Кстати, непонятно причем тут бизон, ведь он - парсер и там никаких ДКА нету (ну если ты не имеешь в виду LR*). А вообще с т.з. производительности - переплюнуть flex от сложно до невозможно. Думаю копать надо в сторону утилизации multicore. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| rudvil |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Я тоже пока думаю о switch'е, т.к. его реализация кажется самой простой.
За разьяснения спасибо, а насчет производительности - куда уж мне до flex'а и antlr'а, их я брал только как примеры реализаций, не более. Про bisona, извиняйте что сразу не сказал - я пишу генератор парсера из EBNF грамматики, поэтому и написал о нем. Насчет branch prediction, правила в грамматике обычно небольшие(если такие и будут то можно выводить warning пользователю), так-что разбив все правила на методы - их switch'и будут относительно небольшими. з.ы. для начала хотелось бы заставить все это "заработать", так как надо Это сообщение отредактировал(а) rudvil - 16.3.2011, 16:44 --------------------
xor |
||||
|
|||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Это задумывается как проект "для себя"? Кстати, есть один лексер, который работает ровно в два раза быстрее флекса - RE2C. Но он использует всякие хитрости.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Да. --------------------
xor |
|||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Во всяком случае пока код в порядок не приведу, то точно для себя, а то стыдно за этот ужос
--------------------
xor |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |