Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Парсер текста со скобками (круглыми, фигурными и проч.)


Mihelson ©   (2010-10-02 13:02:00) 

Посоветуйте, пожалуйста, парсер для Delphi текста со скобками (круглыми, фигурными и проч.), числами, знаками препинания. Могут быть вложения.


Petr V. Abramov   (2010-10-04 16:58:00) [1]


> Теперь Вы понимаете, что начинать все же надо с ТОЧНОГО
> определения входного языка?

не, нужно сначала понять, что такое входной язык :)


> Mihelson   (02.10.10 14:45) [12]
>
> текст, состоящий из скобок (круглых, фигурных), чисел, знаков
> препинания, ASCII-символов.

если на текст никаких дригих огрничений не наложено, парсер тривиален: идем по тексту до символа, который не скобка никакого сорта, не число (кстати, что такое число? A12AEF - это число или строчка?), не знак препинания и не ASCII-символ, и говорим, что в этой позиции ошибка. елси дошли до конца файла, говорим: да, классный файл, могу еще такой распарсить. больше сказать нечего, потому что структуры у текста нет.
но скорее всего, структура все-таки есть, и не все файлы "правильные" т.е. ей соответствуют. простейший пример: наверняка подразумевается, что открывающейся фигурной скобке соответсвует закрывающаяся, тоже самое с обычными. если где-то скобка не закрыта, файл признается неверным, плохим, негодным, имеющим неправильную структуру и работа с ним прекращается, пока пользватель не разберется со скобками.
в общем-то всего лишь набор пободных требований к структуре файла и называется входным языком. как его формально описать? да есть куча способов, опиши пока неформально.
а уж по ходу выяснения, является заданный текст ттекстом на входном языке в простейшем случае сами по себе решаются прикладные задачи, превращение его в структуру данных. как это может ни показаться странным.


Юрий Зотов   (2010-10-02 18:52:00) [2]


> Mihelson   (02.10.10 14:45) [12]

Текст "(()))[[](])[[((((][))([][}{" вполне удовлетворяет Вашему определению входного алфавита, поскольку он включает в себя только те символы, которые в этот алфавит входят. То есть, синтаксически он правилен, но вряд ли имеет какой-то смысл.

Возьмите другой текст: 'A(,) {} 2'#5

Он под Ваше определение попадает абсолютно, так как состоит именно из "скобок (круглых, фигурных), чисел, знаков препинания, ASCII-символов". Но смысла тоже не имеет.

Теперь Вы понимаете, что начинать все же надо с ТОЧНОГО определения входного языка? Пока его нет, ничего получиться не может - потому что пока его нет, просто не о чем даже и говорить.


Mihelson   (2010-10-02 14:45:00) [3]


> Andy BitOff ©   (02.10.10 14:00) [10]
>
> > Mihelson   (02.10.10 13:43) [6]
> > произвольного текста, состоящего из скобок
>
> Странный какой-то текст получится - "(()))[[](])[[((((][))([][}{"


текст, состоящий из скобок (круглых, фигурных), чисел, знаков препинания, ASCII-символов.


Andy BitOff   (2010-10-02 14:00:00) [4]

> Mihelson   (02.10.10 13:43) [6]
> произвольного текста, состоящего из скобок

Странный какой-то текст получится - "(()))[[](])[[((((][))([][}{"


Юрий Зотов   (2010-10-02 14:00:00) [5]

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


Юрий Зотов   (2010-10-02 13:58:00) [6]

Погуглите на тему Lex & Yacc


Mihelson   (2010-10-02 13:52:00) [7]

Да, я тоже так думаю. Уверен, что придется найденный парсер адаптировать для своих целей. Но мне хотя бы что-то для начала иметь, скелет, так сказать. А дальше я с ним сам буду работать.


Юрий Зотов   (2010-10-02 13:49:00) [8]


> Mihelson   (02.10.10 13:43) [6]

Рискну предположить, что парсеров ПРОИЗВОЛЬНОГО текста не существует. Парсер - это преобразователь входного текста на ОПРЕДЕЛЕННОМ языке в последовательность токенов. Вот этот ОПРЕДЕЛЕННЫЙ входной язык и надо сначала задать. С помощью БНФ, синтаксических диаграмм, или еще как-то - но он должен быть ЗАДАН.


Mihelson   (2010-10-02 13:43:00) [9]

Сорри, наверное, неправильно выразился. Не исходного кода, а произвольного текста, состоящего из скобок и т.д.


Юрий Зотов   (2010-10-02 13:41:00) [10]

Возможно, Dream Scripter?
http://www.sourcecodeonline.com/details/dream_controls__freeware_part_.html

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


Mihelson   (2010-10-02 13:38:00) [11]

Да, парсер, написанный для среды Delphi и способный разбирать текст, состоящий из скобок (круглых, фигурных), чисел, знаков препинания, ASCII-символов. Возможно вложение скобок.


Юрий Зотов   (2010-10-02 13:34:00) [12]

То есть, парсер исходного кода на языке Delphi?


Mihelson   (2010-10-02 13:14:00) [13]

парсер для Delphi. Парсер текста.


Юрий Зотов   (2010-10-02 13:08:00) [14]

А что такое "Delphi текст"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо