![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Парсер текста со скобками (круглыми, фигурными и проч.)
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 текст"?