- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
"Everything should be made as simple as possible, but not simpler." - Albert Einstein.
Using regular expressions is usually less complicated than writing a parser. It is not that hard to learn them. It just takes a little time and practice.
Admin
Only because the tools for creating parsers in many languages are needlessly complicated, written by masochistic compiler authors who see no need to cater to plebs who aren't in the business of constructing industrial-grade optimizing compilers themselves.
Parser combinators make life so much simpler...
Admin
I actually like Regexes.
*flamesuit on
Admin
It was named after the book. This was the 1960s. Languages didn't need names (or rather, were named after papers/books/their authors).
Admin
Regexes are lovely if and only if you're parsing a regular language. Otherwise, they are the wrong tool for the job, and you need something stronger to come up with a robust solution.
Admin
Like HTML?
Filed under: Jeffed!
Admin
Bad ideas thread is :left_luggage: :up: :angry: :large_blue_diamond:.
On top of being unable to incompletely specify the grammar, abusing regexes in this way is hugely verbose and expensive, especially compared to a LALR parser.
Admin
What's a "regular language"?
My main use for Regexes has been the command parser in my MUD. Am I Doing It Wrong™?
Admin
As your MUD grows in complexity, you'll hit the limit very soon.
Admin
A regular language is a formal language that can be generated or parsed by a deterministic finite automaton (equivalently, it's grammar can be expressed as a regular expression).
So, about your MUD -- it depends. What is your grammar like? If it's left (or right) linear, regexes are fine. If it has nesting of commands, stop and use a LALR before it becomes expensive (in your time). Honestly, if your commands are more than one or two subcommands deep, I would switch to LALR anyway.
Admin
Ummm.. Discourse does (did?) that, that's why I said it?
Admin
What limit?
Idk, it's worked well for me so far and it's pretty easy to add new commands in, but everyone's knee-jerk reaction to Regexes is one of hatred. I can't imagine a better way to do what I'm doing so I'm trying to figure out if I'm wrong or if every other developer is wrong.
Admin
Two better ways have already been offered in this thread:
Admin
Well I guess you could design your commands so RegEx will mostly work, other than looking up dynamic keywords from the database. If you allow constructs like 1.plank to identify the first of many planks in the room, you'll outgrow RegEx very quickly. Or end up with a bubbling mess of a codebase. Either/or.
I mean a really complex MUD might allow a command like:
I'm guessing that would be a wide-awake nightmare to implement in RegEx. (Note the two bits of quoted text need to be broadcast to the room in the default and annotated languages, scrambled based on what languages the hearer can understand.)
The command parser in my old RP MUD was something like 300+ lines. Given, it was shitty C code. But still.
Admin
I don't have an easy count for mine, it's modular. There's a class for each command, and each command has a Regex to determine if the input applies and pull the interesting bits out when needed. Then the command parser has a list of commands and tries them one-by-one until one returns that it was successful.
Admin
Ok. RegEx still sucks.
Admin
Yeah, abusing SQL is totally Perl's fault.
Admin
The original regexp language was simple and clean. It's grown since, like a syntax cancer, and one of the biggest perpetrators of this… growth… has been Perl, which has been ground zero for Bad Ideas With Regexps for at least 20 years.
Admin
Which combinators were you thinking of?
Admin
You could say the same about SQL. Edgar Codd's baby grew into a beautiful, elegant woman and has now transformed into one of those medieval maps with Heere be Dragons on large sections.
Admin
I would suggest a port of Parsec to your language of choice (if it's been ported, of course).
Admin
Does that require me to make the Kessel Run?
Filed Under: Almost-A-Pun
Admin
I'm not even speaking to a specific implementation -- although one that is close to EBNF syntax is a good idea, IMO.
Admin
Interesting. The example has quite a lot of sleight of hand — a bit more than I'd normally expect, especially in the expression handling — but it still looks interesting. Is it taking advantage of Haskell's evaluation scheme to deal with lookahead? (Well, that particular example won't be, and most people try to avoid long lookaheads in their grammars, but in general.)
Admin
And then I got banned because I made the mistake of trying to work out what the class restrictions on an item were by wearing it with different characters. (Normally when you wear an item you get told that it's only wearable by a specific class but this item would just say "it is too much extra weight".)
Admin
Nothing to do with getting coins from other people's kills?
Admin
No, it doesn't handle backtracking in any "magical" way. You have to explicitly allow for it, using the
try
combinator.The really nice insight is that although parsers can be monadic, EBNF parsers can be expressed in terms of applicative functor combinators (and 'alternative' functors, which are monoids in the category of applicative functors). So you get to use nice notation like:
or
There are 'better' applicative parser combinator libraries now (i.e., more suited to specific domains), but Parsec was the first one to use the applicative functors approach. Attoparsec is another library to consider, and has been tuned for high performance on strict Text. But it doesn't have backtracking at all (iirc).
Admin
Admin
Just don't share that on snapchat.
Admin
Admin
I found an explanation of parser combinators which actually made sense to me.
http://theorangeduck.com/page/you-could-have-invented-parser-combinators
Admin
Your SQL metaphor has grown like an acorn into a magnificent Boeing 747.
Admin
Sorry for the very late response to this, just saw the message by accident (Discoursety). I am curious to know how a version using EXISTS would compare.
In DB2 at least, EXISTS is often much faster than IN, because the latter materializes the entire set while the former only looks for one row (set is not empty). In fact, in the DB2 environment, I rarely use this form of IN because of that. Mostly the savings only materializes if the IN set can be of significant size.
AIA for any typos.
Admin
Admin
IOW, meaningless performance differences…
Admin
In this instance, yup.
Admin
Missed one?
Admin
Prolly. I just copy-pasted the query he wanted to compare with mine...
Though given it's a literal, not sure how using
EXISTS
would help with that one, given how much use it was with the rest of the query.Admin
Hence my question mark. Just wanted to be sure that I had not misunderstood anything.
Admin
Аллюр https://ayurdara.ru/fotoal_bomy/ayurdara_na_vasil_evskom_ostrove/15/
МАКШИКА 1 (Макшика+Нетра) ПХАЛА – Фруктовый массаж https://ayurdara.ru/fotoal_bomy/ayurdara_-_ayurveda_v_sankt-peterburge/5/1/
Ещё раз о пользе насьям https://ayurdara.ru/vopros-otvet/rasprodazha_podarochnyh_sertifikatov_spa-programmy_-50_massazhi_i_procedury-_20/
Дхату – пауштик расаяны: Усиливают оджас, иммунитет и ткани тела https://ayurdara.ru/sredstva_firmy_nagarjuna/kumkumadi_kumkumadi/ Растения, имеющие такие свойства это, к примеру, амла (индийский крыжовник), шатавари (аспарагус рацемозус), шиладжит (индийское мумие), ашвагандха (витания снотворная), паста чаванпраш https://ayurdara.ru/fotoal_bomy/2021/21/ Вайя стхапани расаяны: Увеличивает продолжительность жизни, поддерживает молодость тела и кожи, замедляет старение тела https://ayurdara.ru/sredstva_firmy_kottakkal/indukantam_kvatham_indukantam_kwatham/ Этими качествами обладают семена и ягоды винограда, гранаты, куркума, трифала, дашамула, лотос арабский https://ayurdara.ru/fotoal_bomy/den_jogi_2022/ Медхъя расаяны: Увеличивают интеллектуальные способности и память, убирают стресс https://ayurdara.ru/fotoal_bomy/pattadakal_aihole/8/ В этом нам помогают брами (центелла азиатика, готу-кола), джатамамси (аралия), вача (аир болотный), брами расаяна, сарасвати расаяна https://ayurdara.ru/fotoal_bomy/indijskij_tradicionnyj_centr_zdorov_ya_ayurdara/?p=1 Ваджикарана – аюрведические афродизьяки, увеличивающие либидо и улучшающие качество репродуктивной ткани https://ayurdara.ru/vopros-otvet/_6/ При воздержании — увеличивают интеллект, память и жизненную силу https://ayurdara.ru/ayurvedicheskie_preparaty_himalaya_herbals_indiya/talekt_talekt_himalaya_herbals/ К этим растениям относятся: шатавари, шафран, ашвагандха, индийская роза (она же чайная, бенгальская или китайская), шиладжит, нарасимха расаяна (мужчины), фаласарпис (женщины) и другие https://ayurdara.ru/vopros-otvet/?p=17
Количество https://ayurdara.ru/fotoal_bomy/ayurdara_na_vasil_evs
Admin
Желание заказчика — для нас закон https://enli-msk.ru/tproduct/189137735-970766959525-kuhnya-gloss Сделаем столешницы и фасад с закруглениями https://enli-msk.ru/direct/tproduct/500921241-832485839051-kuhnya-modern Не только в горизонтальной плоскости, но и в вертикальной https://enli-msk.ru/tproduct/189137735-313148858291-kuhnya-vudlyuks
Материал фасада: ЛДСП, Массив Стиль: Дизайнерские, Лофт Цвет: Орех, Серый Столешница: ЛДСП Цена за погонный метр: 54 731 рублей https://enli-msk.ru/direct
Корпус из 3-х слойного ЛДСП https://enli-msk.ru/direct/tproduct/500921235-374157060731-kuhnya-ribbed
Цена до акции: 16625 р https://enli-msk.ru/target
Материал фасада: ЛДСП Стиль: Модерн, Современный Цвет: Орех Столешница: ЛДСП Цена за погонный метр: 59 940 рублей http://enli-msk.ru
Доработка дизайн-проекта в течение 2-3 суток https://enli-msk.ru/
Admin
Поскольку изделие симметричное, то достаточно сделать лекало 1?2 части https://materline.ru/catalog/mattress_toppers/ Выкройка подушки для беременной показана ниже https://materline.ru/catalog/mattresses/comfort/dolce_luna/ При желании вы можете корректировать размеры https://materline.ru/catalog/pillows/saponetta/
В сегодняшнем уроке предлагаем вам заняться https://materline.ru/catalog/mattresses/lux/dolce_luna_multipaket/ Это одно из самых приятных занятий для каждой женщины https://materline.ru/catalog/mattresses/duet/ Автор мастер класса Мария Старикова расскажет вам, как сшить традиционную подушку по всем ремесленным канонам https://materline.ru/catalog/mattresses_for_babys/ Она имеет круглую форму (наподобие каравая из печи) и сшита из ситца https://materline.ru/catalog/mattresses/lux/laura/ А еще дополнена красивой незатейливой аппликацией https://materline.ru/contacts/ Такую и под голову можно положить и на стул для большего комфорта https://materline.ru/catalog/mattresses/lux/
Считаю что подушка для кормления в наше время уже необходимость https://materline.ru/catalog/mattresses/lux/dolce_luna_multipaket/ Все мы щас подстраиваемся под современные технологии которые нам облегчают воспитание малыша https://materline.ru/contacts/ Я пользовалась подушкой для кормления от фирмы эргофид http://materline.ru Это было спасением для моих рук и спины, на нее положил малышку и она кушает https://materline.ru/catalog/mattresses/comfort/dolce_luna/
У меня все, надеюсь помог!? Спасибо за внимание, и за то, что осилили такой объем информации https://materline.ru/catalog/mattresses_for_babys/ До новых встреч на Вопрос Авто, берегите себя и свой автомобиль https://materline.ru/catalog/mattresses/ Пока https://materline.ru/catalog/pillows/saponetta/
Неисправные подушки — распространенное явление особенно в автомобилях с большим пробегом https://materline.ru/catalog/ Не работать они могут по нескольким причинам, например, в связи с истечением срока пригод
Admin
КПБ Мако-Сатин 3D артикул 1001 http://sklad46.ru
Простынь размеры см, (шт) Размерный ряд постельного белья из мако - сатина: Либо Вы можете воспользоваться нашим интернет-магазином https://sklad46.ru/uslugi/podushki/ Вся продукция компании, в том числе и новинки, представлены в Каталоге https://sklad46.ru/kompaniya/partnery/ Делайте заказ, и мы отправим его транспортной компанией в Москву в течении 3х рабочих дней https://sklad46.ru/uslugi/tumbochki-i-shkafy/ Подробности Вы можете узнать на страницах Условия работы и Доставка https://sklad46.ru/uslugi/matrasy/po-tipu/porolonovye/
Расширяя рынок сбыта, мы налаживаем партнерство с ведущими транспортными компаниями https://sklad46.ru/uslugi/odeyala/ Купить продукцию в Иваново может каждый независимо от того, где сосредоточен бизнес https://sklad46.ru/kontakty/politika-konfidentsialnosti/ Ориентируясь на европейский уровень обслуживания, мы стараемся, чтобы сотрудничество с ивановской фабрикой было для клиента не только выгодным, но и удобным https://sklad46.ru/uslugi/polotentsa/polotentsa-dlya-spa-salonov/
Лукас поплин https://sklad46.ru/uslugi/podushki/
Admin
К преимуществам магазина можно отнести: Исключительно все жаждут уверенности, что приобретают продукцию высочайшего качества https://акваторг24.рф/zapornaya-radiatornaya-kotelnaya-armatura/kollektor-iz-nerzhaveyuschey-stali-dlya-teplogo-pola-3-kontura-tim-art-kcs5003/ Наш интернет-магазин сантехники гарантирует это https://акваторг24.рф/product/diametr-truby-v-dyuymah/2-1-2/
…теперь это коснулось и сантехники https://акваторг24.рф/gruppy-bezopasnosti/kronshteyn-gruppy-bezopasnosti-du25/ Нашел интернет – магазин сантехника онлайн https://акваторг24.рф/polipropilenovye-truby-slt-aqua-polipropilenovye-truby-slt-aqua/polipropilenovye-truby-armirovannye-1/armirovannaya-steklovoloknom-truba-slt-aqua-pp-r-pp-r-gf-pp-r-d63x10-5-sdr6-4-m-sltpgf66325/ Вполне достойный магазин, есть все что надо и цены терпимые https://акваторг24.рф/truby-i-fitingi/hromirovannyy-troynik-latunnyy-tim-1-2-x1-2-x1-2-art-k-tfmf222/
Официальный сайт: santehmoll https://акваторг24.рф/product/tip-rezby/2f/ ru https://акваторг24.рф/truby-i-fitingi/svarochnyy-apparat-dlya-trub-i-fitingov-ppr-1800-vt-tim-wm-02/