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;
      }
    }
  }
}