Обсуждение: RE: [HACKERS] [OT] flex, yacc, and bison
I'm trying to write a ncftp_auth deamon that will utilize PostgreSQL. The base SDK is in C. I'm adapting it to C++ because I feel like it, but Perl would be a slightly steeper learning curve (sockets and all that). I'm trying to get a conf file parser such that the login's can be in multiple database and/or on different machines.DEJ > -----Original Message----- > From: Michael Alan Dorman [SMTP:mdorman-pgsql.hackers@debian.org] > Sent: Wednesday, August 18, 1999 4:46 PM > To: pgsql-hackers@postgreSQL.org > Subject: Re: [HACKERS] [OT] flex, yacc, and bison > > Tom Lane <tgl@sss.pgh.pa.us> writes: > > "Jackson, DeJuan" <djackson@cpsgroup.com> writes: > > > I need to parse this format: > > > <Database ftpdatabase [hostname[:port]]> > > > [<DatabaseID somebody>] > > > [<DatabasePWD mypwd>] > > > [<Table ftp_users> > > > [<Uname uname>] > > > [<CryptedPwd cryptedpwd>] > > > [<FtpPath ftppath>] > > > </Table>] > > > </Database> > > > > That looks suspiciously like an SGML DTD to me... > > Well, it could almost kind of be SGML, but as specified, there's no > way it could possibly be XML (attributes have to have values, a couple > of other things), which is unfortunate, since that's where all the > cool tools are being developed these days. > > > Rather than doing the whole lex/yacc bit, I'd suggest finding some > > ready-made SGML-parsing tools. For instance, if you are handy with > > Perl I think there are some SGML modules in CPAN ... certainly there > > are HTML parsers, which'd probably be easy to adapt to the purpose. > > I agree with Tom that you try to find existing parsers tuned towards > this stuff, with the addition that you do your self a favor (if you > have the option to change the format), and change it to be something > that can be parsed as XML. > > You don't mention what this is for, but if you're able to move to XML, > you can use Perl (which I personally prefer), Python, TCL, or even one > of several C libraries (expat or rxp or GNOME's libxml) that are > suprisingly easy to use, given that text hacking is not something that > is traditionally easy to do in C. The possibilities are much broader. > > Mike. > > ************ > Check out "PostgreSQL Wearables" @ http://www.pgsql.com
On 18-Aug-99 Jackson, DeJuan wrote: > I'm trying to write a ncftp_auth deamon that will utilize PostgreSQL. The > base SDK is in C. I'm adapting it to C++ because I feel like it, but Perl > would be a slightly steeper learning curve (sockets and all that). I'm > trying to get a conf file parser such that the login's can be in multiple > database and/or on different machines. If you're into C/C++ (like I am), it's almost trivial to parse that into individual strings. I was under the impression from your first note that C/C++ wasn't an option. At the minimum, think strtok(). There's also strsep() but it's not been one of my favorites. If you still need actual code let me know and I can send you something. Vince. > DEJ > >> -----Original Message----- >> From: Michael Alan Dorman [SMTP:mdorman-pgsql.hackers@debian.org] >> Sent: Wednesday, August 18, 1999 4:46 PM >> To: pgsql-hackers@postgreSQL.org >> Subject: Re: [HACKERS] [OT] flex, yacc, and bison >> >> Tom Lane <tgl@sss.pgh.pa.us> writes: >> > "Jackson, DeJuan" <djackson@cpsgroup.com> writes: >> > > I need to parse this format: >> > > <Database ftpdatabase [hostname[:port]]> >> > > [<DatabaseID somebody>] >> > > [<DatabasePWD mypwd>] >> > > [<Table ftp_users> >> > > [<Uname uname>] >> > > [<CryptedPwd cryptedpwd>] >> > > [<FtpPath ftppath>] >> > > </Table>] >> > > </Database> >> > >> > That looks suspiciously like an SGML DTD to me... >> >> Well, it could almost kind of be SGML, but as specified, there's no >> way it could possibly be XML (attributes have to have values, a couple >> of other things), which is unfortunate, since that's where all the >> cool tools are being developed these days. >> >> > Rather than doing the whole lex/yacc bit, I'd suggest finding some >> > ready-made SGML-parsing tools. For instance, if you are handy with >> > Perl I think there are some SGML modules in CPAN ... certainly there >> > are HTML parsers, which'd probably be easy to adapt to the purpose. >> >> I agree with Tom that you try to find existing parsers tuned towards >> this stuff, with the addition that you do your self a favor (if you >> have the option to change the format), and change it to be something >> that can be parsed as XML. >> >> You don't mention what this is for, but if you're able to move to XML, >> you can use Perl (which I personally prefer), Python, TCL, or even one >> of several C libraries (expat or rxp or GNOME's libxml) that are >> suprisingly easy to use, given that text hacking is not something that >> is traditionally easy to do in C. The possibilities are much broader. >> >> Mike. >> >> ************ >> Check out "PostgreSQL Wearables" @ http://www.pgsql.com > > ************ > Check out "PostgreSQL Wearables" @ http://www.pgsql.com > -- ========================================================================== Vince Vielhaber -- KA8CSH email: vev@michvhf.com flame-mail: /dev/null # include <std/disclaimers.h> TEAM-OS2 Online Campground Directory http://www.camping-usa.com Online Giftshop Superstore http://www.cloudninegifts.com ==========================================================================
On 18-Aug-99 Vince Vielhaber wrote:
>
> On 18-Aug-99 Jackson, DeJuan wrote:
>> I'm trying to write a ncftp_auth deamon that will utilize PostgreSQL. The
>> base SDK is in C. I'm adapting it to C++ because I feel like it, but Perl
>> would be a slightly steeper learning curve (sockets and all that). I'm
>> trying to get a conf file parser such that the login's can be in multiple
>> database and/or on different machines.
>
> If you're into C/C++ (like I am), it's almost trivial to parse that into
> individual strings. I was under the impression from your first note that
> C/C++ wasn't an option. At the minimum, think strtok(). There's also
> strsep() but it's not been one of my favorites. If you still need actual
> code let me know and I can send you something.
It's my bestst:
int split(char delem, char *str, ... )
{ char *tmp, *_src, *t, **s; int fields = 0;
_src = str;
va_list ap;va_start(ap, str);
if (! (tmp=new char[2048]) ) return -1;
while(_src) { t = _src; while (*t && ((*t) != delem) ) ++t; s = va_arg(ap, char **); if (!s || !*t)
break; *s = ( t-_src-1 > 0) ? strndup(_src,t-_src-1) : 0 ; _src = t+1; ++ fields; }
return fields;
}
---
Dmitry Samersoff, dms@wplus.net, ICQ:3161705
http://devnull.wplus.net
* There will come soft rains ...