Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение дерева синтаксического анализа, при помощи регулярных выражений 
:(
    Опции темы
Stampede
Дата 17.5.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Вот столкнулся с задачкой: имеется строка, содержащая некое выражение в инфиксной нотации, примерно такого вида:

(A B C)

где A и C - некие операнды, каждый из которых, в свою очередь, может быть рекурсивно представлен формулой аналогичного вида, и так далее:

((a b ((c d e) f (g h i))) j (k l m))

Построить собственно дерево - не вопрос, но возникла идея приспособить для этого дела регулярное выражение - чтобы, так сказать, попользоваться плодами технического прогресса. В принципе грамматика тривиальная, но как составить регексп таким образом, чтобы он коррестно находил и возвращал самые внешние операнды? То есть в случае данного примера:

A = (a b ((c d e) f (g h i)))
B = j
C = (k l m)

Если такое возможно, то всех делов будет - организовать рекурсию. Но вот возможно ли, в этом я не очень уверен, тем более что с регекспами я тово, не сильно дружу.

Будут какие-нибудь идеи?

PM WWW   Вверх
Void
Дата 17.5.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Приспособить регулярные выражения для распознавания такой записи невозможно. Дело в том, что эта скобочная запись - контекстно свободная грамматика, а регэкспы распознают только праволинейные (автоматные) грамматики, которые являются подмножеством КС-грамматик.
Здесь проще всего написать рекурсивную функцию разбора или конечный автомат со стеком. Будут проблемы в реализации - пиши, поможем smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Stampede
Дата 17.5.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(Void @ 17.5.2005, 19:40)
Приспособить регулярные выражения для распознавания такой записи невозможно


Вот за что ценю экспертное знание - за способность мгновенно отсекать тупиковые варианты smile

Я, кстати, уже и сам спинным мозгом прочуствовал, что ерунда какая-то получается с регекспом: громоздко, некрасиво и ненадежно, даже если бы принципиально это оказалось возможно. Тем более что распарсить рекурсивно вручную всех делов оказалось где-то на (линенйых) полметра кода smile

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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