Эффективный парсинг на С/С++

Тема в разделе "LANGS.C", создана пользователем alexparser, 21 май 2010.

  1. Damon

    Damon New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2010
    Сообщения:
    23
    Pavia
    Угу, только моя реализация будет работать и на ARM'е и на AVR и на х86, поскольку использованы только стандартные средства С++! А ваша, написанная на х86 asm'е? :derisive:
    Когда-то я тоже считал asm верхом совершенства, но сейчас в основном, ориентируюсь на встраиваемые системы и контроллеры. В частности используя выше приведенную идиому, накатал NMEA парсер, который и на AVR и на ARM7 и ARM9 и на х86 будет работать без переписывания.

    Заметте, я не утверждал, что они самые быстрые и рвут КМП или БМ алгоритмы. Я этой стороны вообще не касался, и здесь согласен с моим апонентом:
    Далее...
    Поясните подробнее, пока это выглядит просто как сотрясение воздуха.

    Это юмор такой? Звучит как тавтология, что-то вроде "с точки зрения банальной эрудиции..." и т.д. :)

    Вообще, согласно теории для каждого НКА есть эквивалентный ДКА и наоборот. Кто вам мешает "конвертнуть" "не эффективный НКА" в эффективный ДКА? У Ахо-Ульмана вполне доходчиво описано, как это сделать.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Моя тоже на Си. Я пропагандирую то что на высоком уровне эффективно может работать только тот кто знает низкий.

    Очень печально видеть такое. Регулярки дают скорость в написание ии легкость понимание человеком. Но вот скорость от них тоже желательна просто многие уже согласились с той мыслей что это невозможно. Это печально.

    ВМ может быть как МТ так и магазинным автоматом. При этом это будут разные ВМ.
    Вы же сгребли в кучу универсальную ВМ и специальную для регулярных выражений. А она не может распознать больше чем умеет. Другими словами: не любая ВМ может заметить МТ.


    Я бы не хотел в даваться в подробности по определенным причинам.
    http://www.devarticles.com/c/a/Java/NFA-DFA-POSIX-and-the-Mechanics-of-Expression-Processing/2/
     
  3. Damon

    Damon New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2010
    Сообщения:
    23
    М-де... У меня складывается понимание того, что меня не поняли. Постараюсь объясниться...
    "Хопкрофт Д, Мотвани Р, Ульман Д. Введение в теорию автоматов, языков и вычислений" ( http://books.google.ru/books?id=Th5...&q=магазинный автомат это по существу&f=false ):
    Т.о. магазинный автомат -- надстройка над обычным автоматом. Едем далее...
    http://ru.wikipedia.org/wiki/Машина_Тьюринга:
    Именно по этому критерию (что все является расширением [надстройкой над] конечного автомата) я и "сгреб их в кучу". Любые дополнительные операции будут выливаться в уменьшение скорости обработки. Что вас, кстати, опечаливает. :)
    Далее. А почему НКА так уж не эффективен? Согластно "Ахо А, Сети Р, Ульман Дж. Компиляторы. Принципы, технологии, инструменты 2-е издание" (стр. 220), НКА для разбора строки требуется не более O(x+r), а ДКА O(x). Т.о. при длине регекспа << длины строки, они практически сравнимы по времени работы.
    Мне от этого также веселее не становиться, и я всячески пытаюсь доказать, что регекспы могут работать шустро, при условии простоты и построения "по науке", вы же утверждаете, что я "не прав в корне"!
    Ах, вот оно что! Да, признаю, у меня пробел был в этом плане. Просто когда использовал автомат в своих проектах, использовал его исключительно для нарезки токенов, а там пофигу, НКА или ДКА. А sed'ом пользовался не задумываясь о принципах его функционирования, и не требуя от него запредельных скоростей. Впрочем, возвращаясь в рамки топика -- топик стартеру тоже пофиг на эти фичи НКА.
    Т.о. ДКА его вполне мог бы устроить, ИМХО. Не факт, что на его задаче (субъективно) он существенно проиграет по скорости специализированным алгоритмам поиска.

    Собственно это все что я пытался донести.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Только тут умножение, а не сложение.
    [​IMG]


    В большинстве случаев, да.

    На самом деле я очень глубоко копал так как мне было интересно самому реализовать регулярные выражения.
    Пришел выводу что можно сделать так что они летать будут. Но только для каждого частного случая нужна своя оптимизация.
     
  5. Damon

    Damon New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2010
    Сообщения:
    23
    Черт! Прошу прощения, на радостях перепутал. Точнее, не доглядел.
    Тогда, да, вопрос снимается. :)

    Так это везде так...
    Оптимизация сродни исскуству -- строго индивидуальна. Ну а серебряной пули, как нас учат мудрейшие, не существует...
     
  6. Damon

    Damon New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2010
    Сообщения:
    23
    Возвращаясь к напечатанному...

    Может, кому и пригодиться. А то тема библиотек шустрых регулярок осталась не раскрытой. Здесь раздают PIRE

    Цитата с opennet.ru:
    ИМХО, 3/4 ГигаБайта в секунду, весьма неплохо.

    PS: любопытно, что за железо такое, позволяющее прочитать файл с такой скоростью?
    Т.ч., в рамках топика, вполне может получаиться так, что производительность упрется в вожможности дисковой подсистемы, а не регулярок. Впрочем, не пробывал, утверждать не стану.
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    можно добавить что PIRE это разработка яндекса :)
     
  8. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Если я правильно понял TC (#4):
    , то обычный Aho-Corasic + небольшая доработка для сочетаний, покроют все его потребности.
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Damon
    В интернете попадался отчет по регуляркам. С очень крутыми алгоритмами, но вот реализаций не было. Так что это не придел.
     
  10. Damon

    Damon New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2010
    Сообщения:
    23
    Pavia
    Дык, я не спорю. Просто наткнулся на опеннете, решил сюда запостить. Вдруг, когда-нить, кто-нить будет искать решение подобной проблемы?

    gazlan
    Как правило, аппетит заказчика имеет свойство расти со временем и алгоритмы приходится усложнять... А, вообще, регулярки были предложены как один из вариантов решения, не более того.
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Pavia
    не раса кокса? этот алг в более развитом состоянии используется как стандартный в плане.