Related articles |
---|
Looking for Unix lex for modern systems arnold@skeeve.com (2022-01-06) |
Re: Looking for Unix lex for modern systems gah4@u.washington.edu (gah4) (2022-01-06) |
Re: Looking for Unix lex for modern systems gah4@u.washington.edu (gah4) (2022-01-07) |
Re: Looking for Unix lex for modern systems gah4@u.washington.edu (gah4) (2022-01-07) |
Re: Looking for Unix lex for modern systems arnold@skeeve.com (2022-01-09) |
Re: Looking for Unix lex for modern systems gah4@u.washington.edu (gah4) (2022-01-09) |
Re: Looking for Unix lex for modern systems gah4@u.washington.edu (gah4) (2022-01-12) |
From: | gah4 <gah4@u.washington.edu> |
Newsgroups: | comp.compilers |
Date: | Fri, 7 Jan 2022 15:36:44 -0800 (PST) |
Organization: | Compilers Central |
References: | 22-01-023 22-01-024 |
Injection-Info: | gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="31744"; mail-complaints-to="abuse@iecc.com" |
Keywords: | lex, history, comment |
Posted-Date: | 07 Jan 2022 20:28:31 EST |
In-Reply-To: | 22-01-024 |
(snip, our moderator wrote)
> [Flex can take the same input as lex but its internals are totally different.
>
> Bell Labs long ago released the code to early Unix systems. The source
> for lex is here:
> https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/lex or on
> the 4.2BSD src archive at
> https://www.tuhs.org/Archive/Distributions/UCB/4.2BSD/
> I tried to compile the 4.2BSD version on FreeBSD and the errors were
> ugly. -John]
It seems that real lex known about RATFOR, and I suspect that actual flex doesn't.
Is that a good test for which source you have?
In any case, with
gcc -std=c89 -Dunix
there aren't so many errors (that aren't warnings).
The warnings are from conversion of either the wrong pointer type,
or between integer and pointer. I am not so sure how well current
systems do the latter. (That seems to be usual for C from those years.)
Fixing the actual errors, including removing the initialization
of *errorf with stdout, and not declaring calloc, it compiles and
(with the -t option) runs.
It then stops with:
(Error) output table overflow
5/1000 nodes(%e), 10/2500 positions(%p), 3/500 (%n), 254 transitions
, 2/1000 packed char classes(%k), 3/2000 packed transitions(%a), 0/0 output slots(%o)
(I have the sample file from the Wikipedia page for input.)
Reminds me, in the days of OS/2 1.0, I was compiling the GNU utilities,
and especially grep and diff, for OS/2. In many cases, they would mix integer
and (char*), especially in function arguments. Replacing 0 with (char*)0 fixed
those, but I also complained to the GNU people. The reply was that, pretty much,
any system with sizeof(int) not equal to sizeof(char*) was broken, and it
wasn't their problem to fix.
[If the comments in the source code say "written by Eric Schmidt", it's lex,
otherwise, it's flex. Yes, that Eric Schmidt. -John]
Return to the
comp.compilers page.
Search the
comp.compilers archives again.