![]() |
|
![]() ![]() ![]() |
|
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. |