LINUX.ORG.RU

tcl vs perl Какой язык идеально подходит для парсинга?

 , ,


2

2

Вот, думаю взяться за изучение языка, специально для продвинутого парсинга. С одной стороны, вроде бы тикль идеологически подходит: все есть строка. С другой — чаще всего perl хвалят, под такую задачу. Плюс, в перле, я слышал, лучшие регекпы и самая продвинутая интеграция их в язык. Два языка сразу учить не хочется. При прочих равных я бы предпочел тикль. Может кто-нибуль посоветует, из опыта?



Последнее исправление: terminator-101 (всего исправлений: 1)

Ответ на: комментарий от anonymous

Да и перловские регекспы самые продвинутые (название либы pcre как бы намекает).

По возможностям --- наверное, да, по производительности --- нет. Кстати, на что намекает название?

А про тикль здесь забудь. Получится чудовищное многословное спагетти.

С чего бы?

Тикль хорош для описания гуйни, не надо его притягивать куда ни попадя.

Писал, но спагетти мне не досталось. ;)

anonymous
()
Ответ на: комментарий от anonymous

Я так понимаю, раз переходишь на личности, то по теме тебе нечего сказать. В таком случае делай уроки и ложись спать.

Aswed ★★★★★
()
Ответ на: комментарий от tailgunner

Для парсинга лучше всего подходят ML-подобные языки

А почему? Мы хотим тут написать большой умный парсер, выбрали Clojure. (интересно, не похоливарить спросил)

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Для парсинга лучше всего подходят ML-подобные языки

А почему?

Потому что ADT, pattern matching и статическая типизация.

Мы хотим тут написать большой умный парсер, выбрали Clojure.

Кложурщики выбрали кложуру, внезапно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Потому что ADT, pattern matching и статическая типизация.

Потому что гладиолус, иными словами. Там хоть call/cc есть в твоем ML?

anonymous
()
Ответ на: комментарий от anonymous

Там хоть call/cc есть в твоем ML?

В SML/NJ есть.

anonymous
()
Ответ на: комментарий от tailgunner

Потому что ADT,

Зачем оно для парсинга?

pattern matching

Зачем оно для парсинга? Строки текста матчить собрался?

и статическая типизация.

Зачем оно для парсинга? Какие типы кроме char и string там вообще могут быть?!?

anonymous
()
Ответ на: комментарий от anonymous

Выходы из непредсказуемых ситуаций делаются исключениями и/или использованием алгебраических типов. goto в задачах _прикладного_ программирования используют только дебилы.

а ты уже слился.

Ты смешной.

Пытаешься спрятать свой бугурт?

Aswed ★★★★★
()
Последнее исправление: Aswed (всего исправлений: 1)
Ответ на: комментарий от Aswed

Выходы из непредсказуемых ситуаций

Ну ты и дебил! Каких таких «непредсказуемых ситуаций», я говорю про тупо лестницу из if-ов, где в середине парсер может понять, что текущий вариант не сработал и надо перейти к следующему.

goto в задачах _прикладного_ программирования используют только дебилы.

Пойди, тупой школьничек, расскажи Кнуту, что он дебил.

Пытаешься спрятать свой бугурт?

Нет, ржу над некомпетентными, убогими свиньями типа тебя.

anonymous
()
Ответ на: комментарий от anonymous

Ну ты и дебил! Каких таких «непредсказуемых ситуаций», я говорю про тупо лестницу из if-ов, где в середине парсер может понять, что текущий вариант не сработал и надо перейти к следующему

Это же питонист, откуда ему знать. Он риальные_проги пишет.:)

anonymous
()
Ответ на: комментарий от anonymous

я говорю про тупо лестницу из if-ов

Неверную ветку вычислений можно обрабатывать аналогично непредсказуемой ситуации.

Пойди, тупой школьничек, расскажи Кнуту, что он дебил.

Нет, ржу над некомпетентными, убогими свиньями типа тебя.

Как у тебя, однако, бомбануло. Смотри стул не прожги.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Неверную ветку вычислений можно обрабатывать аналогично непредсказуемой ситуации.

Ну ты и дерьмо! Exception дорого стоит, прикинь. Очень дорого. А goto - не дороже branch mis-prediction.

Итак, грязная сучка, пойдешь Кнуту рассказывать, что он дебил, и ничего в goto не понимает?

anonymous
()
Ответ на: комментарий от anonymous

Exception дорого стоит, прикинь. Очень дорого.

Я не ради ругани, а просто интересуюсь. Откуда там дороговизна? Это же по-сути тот же самый goto? Он отбрасывает вычисления, прыгает на «метку» catch.

anonymous
()
Ответ на: комментарий от anonymous

Может писать, конечно в таком стиле не удобно, но имитировать goto можно по-идее, худо-бедно.

anonymous
()
Ответ на: комментарий от anonymous

Exception дорого стоит, прикинь

Синтаксический анализ происходит один раз на текст, так что такими крохоми можно пренебречь. Пока ты будешь отлаживать свои goto(если ты вообще знаком с отладкой, просто мне кажется, что писать ты не можешь в принципе), парсеры адекватных программистов с try catch уже выполнят свою работу.

Итак, грязная сучка, пойдешь Кнуту рассказывать

Может ты еще свою мамку позовешь? Скажешь ей, что злой дядя из интернета тебя обижает.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Синтаксический анализ происходит один раз на текст

Идиот. Редкостный идиот. Расскажи разработчикам компиляторов Си, что им не надо напрягаться выжимать из парсера максимум производительности. Расскажи ту же чушь разработчиком парсеров html и xml. Потом приди сюда и покажи свое разбитое в кровавую юшку тупое хлебало.

так что такими крохоми можно пренебречь.

Процентов 30-40 оверхеда.

Пока ты будешь отлаживать свои goto(если ты вообще знаком с отладкой, просто мне кажется, что писать ты не можешь в принципе),

Убогий, мои goto генерятся из кода на языке более высокого уровня (из BNF, грубо говоря), нечего там отлаживать.

А вообще, насчет отладки goto, пойди, недоумок, поспорь с Доном Кнутом. Объясни ему, какой он тупой и некомпетентный, и как он в подметки не годится школолошке из глубокой провинции.

парсеры адекватных программистов с try catch уже выполнят свою работу.

Найди, придурок, хотя бы один такой парсер. Вместе поржем.

Может ты еще свою мамку позовешь?

Нет, сучка, ты сначала с Кнутом разберись. Кнут говорит, что goto это хорошо. Ты говоришь, что goto это плохо. Докажи, что ты круче Кнута.

anonymous
()
Ответ на: комментарий от anonymous

Идиот. Редкостный идиот

Потом приди сюда и покажи свое разбитое в кровавую юшку тупое хлебало

Убогий, мои goto генерятся из кода

Свет от твоего раскаленного пердака виден даже с венеры, а ведь там очень плотная атмосфера.

Нет, сучка, ты сначала с Кнутом разберись

Прячешься за другими людьми, что бы скрыть свою никчемность?

Найди, придурок, хотя бы один такой парсер. Вместе поржем.

Тебя забанили на гитхабе и гугле? Любой парсер там на языке без поддержки goto использует одну из приведенных мной технологий.

Процентов 30-40 оверхеда.

Тебе сегодня в школе на обеде наркотиков подсыпали. Оверхед от оного try catch такой же как и от вызова функции.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Пизданутенький ты, любой БЫСТРЫЙ парсер из существующих написан на языке с goto, и использует goto. А медленные и убогие парсеры сам жри, безграмотный выблядок.

anonymous
()
Ответ на: комментарий от Aswed

try catch

Слушай, ты вот говоришь о try/catch, тут правильней говорить не об этом, а о throw/catch, во первых, тебе же надо выходить ни где попало, а там, где надо. Допустим. Но далеко не все языки, позволяют бросать исключение с произвольным аргументом. Как ты вернешься в точку вычисления, из которой выпрыгнул? Приведи пример, покажи пример кода, как это может быть.

terminator-101
() автор топика
Ответ на: комментарий от terminator-101

Боюсь, он ни одного парсера с логикой на исключениях не найдет. Их даже на ocaml не пишут, а там исключения самые дешевые из всех.

anonymous
()
Ответ на: комментарий от terminator-101

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

Не уверен, что понял твой вопрос. Насколько специфичен аргумент? Мне доводилось писать парсеры на плюсах(тут исключение может быть любого типа), на OCaml(тут только типа exception, но никто не мешает добавить свой новый конструктор в этот тип и прикреплять к нему необходимую инфу о исключительной ситуации), на haskell(здесь вообще можно обойтись одними монадами и не трогать исключения) и на python(здесь можно запилить свой потомок класса exception и там хранить необходимую инфу о ситуации). В этих языках ты указываешь в блоке catch/except/with какой тип исключения нужен и если «выходить не здесь» то исключение идет дальше во стеку, до необходимого блока catch. Ты это спрашивал?

Aswed ★★★★★
()
Ответ на: комментарий от anonymous

Снова прячешься за других. Как это мило.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Ну, не специфичен, а вообще, любой объект языка. Вот простенький пример

arr=[1, 2, 3, 4, 5, 6]

f1=function(n, cont){
   var i=-1
   try{
   arr.forEach(function(x){i++; if(x===n) throw arr.slice(i)})// сбрасываем стек и делаем goto в cont.
   }catch(e){cont(e)}
}

f1(3, function(arr){console.log(arr)})// продолжаем с того места, где произошел выброс [ 3, 4, 5, 6 ]
Это конечно не то, но смысл в том, что мы должны иметь возможность выйти забрав с собой текущюю точку вычислений, чтобы иметь возможность продолжить потом с нее, не вычисляя все заново. Как-то так.

terminator-101
() автор топика
Ответ на: комментарий от terminator-101

На примере того же камла(revised syntax)

exception Arr of (array int);

value arr = [|1;2;3;4;5;6|];

value f n cont =
   try
     Array.iteri (fun i a -> if a = n
	 				then
						raise (Arr(Array.sub arr i (Array.length arr - i)))
					else
						()) arr
   with [Arr a -> cont a];

f 3 (Array.iter (Printf.printf "%d "));
Язык не позволяет напрямую кидать любой объект как исключение, но используя собственные конструкторы для тима exn это можно сделать.

Aswed ★★★★★
()
Ответ на: комментарий от terminator-101

И, если честно, я не знаю языков с поддержкой исключений, где так делать нельзя.

Aswed ★★★★★
()
Ответ на: комментарий от anonymous

Кнут говорит, что goto это хорошо.

Прямо так и сказал? А мужики из википедии не знают!

An alternative viewpoint is presented in Donald Knuth's Structured Programming with go to Statements, which analyzes many common programming tasks and finds that in some of them GOTO is the optimal language construct to use

iVS ★★★★★
()

Я и на PHP парсил, распарсить страничку - задача рядовая, здесь язык роли не играет, тем более если регулярки использовать. Качество написанного кода куда важнее. ИМХО конечно.

oskar0609
()
Ответ на: комментарий от Aswed

goto в задачах _прикладного_ программирования используют только дебилы.

Я хочу поправить, а не спорить. Твоё утверждение уходит, видимо, к Дейкстра. И у него действительно были веские основания так говорить. Правило отказа от goto хорошо влияет на читабельность программ в случаях, где можно обойтись без него. Например, использовать goto в циклах (взамен if/break/continue) считается дурным тоном у большинства программистов. И в то же время, использовать goto там, где можно воротить огород с throw/catch в исходную критику Дейкстра не попадает. Просто потому что это разный подходы со своими явными плюсами и минусами (читабельность не ухудшается).

И далее по твоим сообщениям про перформанс. throw/catch используют не одну функцию как ты выразился, а много. И стоимость вызова функции дороже, чем присвоение значения переменной.

Если не прав, поправьте.

gh0stwizard ★★★★★
()
Ответ на: комментарий от Aswed

goto в задачах _прикладного_ программирования используют только дебилы.

Ты, сучка, так и не ответил на прямой вопрос: Д. Е. Кнут - дебил?

Если Adventure не «прикладное» программирование, то я уже и не знаю, что такое прикладное программирование.

anonymous
()
Ответ на: комментарий от anonymous

ответил на прямой вопрос: Д. Е. Кнут - дебил?

Кнут хороший программист, который написал достаточно хороших книг. А вот ты дебил, который бегает с иконой Кнута и кукарекает «goto! goto!» так ни в чем не разобравшись.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Кнут хороший программист, который написал достаточно хороших книг.

Ты использовал квантор всеобщности:

goto в задачах _прикладного_ программирования используют только дебилы.

Кнут использует goto в задачах прикладного программирования. Следовательно, по твоему, Кнут - дебил. И вот за этот гнилой базар я и требую с тебя ответа.

так ни в чем не разобравшись.

А ты, сучка, разобралась хоть в чем-то? Кнут очень доступно аргументировал, почему надо использовать goto. СлабО тебе, школолошке, поспорить с его аргументами?

anonymous
()
Ответ на: комментарий от anonymous

Пойди, дебил
ты слоупок.
Пизданутенький ты
Идиот. Редкостный идиот
Ну ты и дерьмо!
Итак, грязная сучка
Смешной ты, пидрилка
за этот гнилой базар я и требую с тебя ответа.

Лооол. Это просто пушка.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.