Re: Languages with optional spaces and tools

Hans-Peter Diettrich <DrDiettrich1@netscape.net>
Fri, 28 Feb 2020 20:16:56 +0100

          From comp.compilers

Related articles
Languages with optional spaces maury.markowitz@gmail.com (Maury Markowitz) (2020-02-19)
Re: Languages with optional spaces and tools DrDiettrich1@netscape.net (Hans-Peter Diettrich) (2020-02-28)
| List of all articles for this month |

From: Hans-Peter Diettrich <DrDiettrich1@netscape.net>
Newsgroups: comp.compilers
Date: Fri, 28 Feb 2020 20:16:56 +0100
Organization: Compilers Central
References: 20-02-015
Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="90702"; mail-complaints-to="abuse@iecc.com"
Keywords: Basic, lex
Posted-Date: 28 Feb 2020 21:03:08 EST

Am 19.02.2020 um 16:35 schrieb Maury Markowitz:


After reading the entire tree, I feel a need for adding my $0.02:


> I'm trying to write a lex/yacc (flex/bison) interpreter for classic BASICs
> like the original DEC/MS, HP/DG etc.


If all you have is a hammer, everything looks like a nail :-(




> 100 FORI = 1 TO 10
>
> The problem is that FORI part. Some BASICs allow variable names with more than
> two characters, so in theory, FORI could be a variable. These BASICs outlaw
> that in their parsers; any string that starts with a keyword exits then, so
> this would always parse as FOR. In lex, FORI is longer than FOR, so it returns
> a variable token called FORI.


Your problem may be the use of lex/yacc! Some older languages are not so
regular and context free and have their own rules for disambiguation.
Such old lexers also can be non-greedy or follow other non-lex rules. So
put aside your hammer and try other tools or your mere fingers...




> [Having written Fortran parsers, not that I've ever found. I did a prepass
> over each statement to figure out whether it was an assignment or something
> else, then the lexing was straightforward if not pretty. -John]


Right, the FORI problem was observed first with FORTRAN, and also was
solved at that time.


When I learned computer science, in the early 70's, the use of parser
generators was almost restricted to the scientific area, for their own
continued development, not for use in compiler construction. At least
the development of a correct formal grammar for those old languages
often; if possible at all; took more time than handcrafting a compiler
front-end.


Also most languages came with a rather informal description of their
terminals, with a more or less complete formal grammar restricted to
their parser.


DoDi


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.