Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация статического кода из ДКА, switch или goto, что лучше? 
V
    Опции темы
rudvil
  Дата 12.3.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Есть ДКА(детерминированный конечный автомат), собираюсь генерировать из него статический код(я.п. С++ если что).
Кто-нибудь сталкивался с подобной задачей?
Что будет оптимальнее - switch, goto или ...? для реализации автомата.
Просмотрел сгенерированные файлы bison'а, там используется switch вперемешку с goto, в ANTLR'е только switch(насколько я знаю в java нету goto, зато исключения там встречаются чуть ли не на каждом шагу).
Хотелось бы увидеть несложный пример алгоритма построения автомата из ДКА на основе(switch, goto или ...).
 smile  спасибо.

Это сообщение отредактировал(а) rudvil - 12.3.2011, 16:46
--------------------
xor
PM MAIL Skype   Вверх
nworm
Дата 15.3.2011, 18:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Лучше switch.

Если получится путанная система, придётся юзать goto.
PM MAIL WWW   Вверх
neutrino
Дата 16.3.2011, 13:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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 
PM MAIL WWW ICQ Skype GTalk   Вверх
rudvil
Дата 16.3.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Цитата(nworm)
Лучше switch.

Если получится путанная система, придётся юзать goto.

Я тоже пока думаю о switch'е, т.к. его реализация кажется самой простой.
Цитата(neutrino)
Лучше всего каждый раз проверять количество переходов. Если оно больше какого-то n, лучше использовать look-up table. То есть записать адреса переходов в таблицу по индексу-байту: если на входе байт b, то идем в look-up table[b]. Switch плох тем, что branch prediction процессора будет почти всегда miss-ить тем самым снижая производительность. 
antlr работает в два раза медленнее flex-а. Кстати, непонятно причем тут бизон, ведь он - парсер и там никаких ДКА нету (ну если ты не имеешь в виду LR*).

А вообще с т.з. производительности - переплюнуть flex от сложно до невозможно. Думаю копать надо в сторону утилизации multicore.

За разьяснения спасибо, а насчет производительности - куда уж мне до flex'а и antlr'а, их я брал только как примеры реализаций, не более.
Про bisona, извиняйте что сразу не сказал - я пишу генератор парсера из EBNF грамматики, поэтому и написал о нем.

Насчет branch prediction, правила в грамматике обычно небольшие(если такие и будут то можно выводить warning пользователю), так-что разбив все правила на методы - их switch'и будут относительно небольшими.

з.ы. для начала хотелось бы заставить все это "заработать", так как надо smile , а потом уже думать о производительности и оптимизации... об этом чуть позже  smile 

Это сообщение отредактировал(а) rudvil - 16.3.2011, 16:44
--------------------
xor
PM MAIL Skype   Вверх
neutrino
Дата 3.4.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Это задумывается как проект "для себя"? Кстати, есть один лексер, который работает ровно в два раза быстрее флекса - RE2C. Но он использует всякие хитрости.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
rudvil
Дата 3.4.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Цитата(neutrino @ 3.4.2011,  11:22)
Это задумывается как проект "для себя"?

Да.
--------------------
xor
PM MAIL Skype   Вверх
rudvil
Дата 3.4.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

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



Во всяком случае пока код в порядок не приведу, то точно для себя, а то стыдно за этот ужос  smile 
--------------------
xor
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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