Deutsch English Français Italiano |
<20240912223828.00005c10@yahoo.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Michael S <already5chosen@yahoo.com> Newsgroups: comp.lang.c Subject: Re: Command line globber/tokenizer library for C? Date: Thu, 12 Sep 2024 22:38:28 +0300 Organization: A noiseless patient Spider Lines: 52 Message-ID: <20240912223828.00005c10@yahoo.com> References: <lkbjchFebk9U1@mid.individual.net> <vbs1om$3jkch$1@raubtier-asyl.eternal-september.org> <vbsb94$1rsji$1@news.xmission.com> <vbsmlb$3o6n2$1@raubtier-asyl.eternal-september.org> <vbsu1d$3p7pp$1@dont-email.me> <vbtj88$1kpm$1@raubtier-asyl.eternal-september.org> <vbujak$733i$3@dont-email.me> <vbum9i$8h2o$1@dont-email.me> <vbur72$99cr$1@dont-email.me> <20240912181625.00006e68@yahoo.com> <vbv4ra$b0hv$2@dont-email.me> <vbv6r1$bhc9$1@raubtier-asyl.eternal-september.org> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Injection-Date: Thu, 12 Sep 2024 21:38:35 +0200 (CEST) Injection-Info: dont-email.me; posting-host="32d1bed41eaca65a0ba9bfa5554d00a2"; logging-data="411115"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18XiXLFfgpFlxPe+mTsz2nWtu6VK3twMTU=" Cancel-Lock: sha1:FhkMUBAQmpY53A/7fB+l0QnaiJU= X-Newsreader: Claws Mail 4.1.1 (GTK 3.24.34; x86_64-w64-mingw32) Bytes: 2850 On Thu, 12 Sep 2024 19:02:35 +0200 Bonita Montero <Bonita.Montero@gmail.com> wrote: > Am 12.09.2024 um 18:28 schrieb Bart: > > > BM's C++ version doesn't handle embedded quotes or single quotes > > either. > > Neither expand wildcards into sequences of filename arguments. > > Ok, that must be impossible with C++. > I just wanted to show how to do it basically and what are the > advantages: no intermediate data structure through functional > progtamming and debug iterators. > > Callback is as easy in C as in C++. Debug iterators not needed in such simple program. At least, I don't need them. Here is an equivalent of your parser written in C. It does not look 5 times longer. Attention! That is an equivalent of Bonita's code, no more and hopefully no less. The routine does not fulfill requirements of OP! #include <stddef.h> void parse(const char* src, void (*OnToken)(const char* beg, size_t len, void* context), void* context) { char c0 = ' ', c1 = '\t'; const char* beg = 0; for (;;src++) { char c = *src; if (c == c0 || c == c1 || c == 0) { if (beg) { OnToken(beg, src-beg, context); c0 = ' ', c1 = '\t'; beg = 0; } if (c == 0) break; } else if (!beg) { beg = src; if (c == '"') { c0 = c1 = c; ++beg; } } } }