Related articles |
---|
Parsing an If...End If construct mness1978@hotmail.com (2004-11-17) |
Re: Parsing an If...End If construct snicol@apk.net (Scott Nicol) (2004-11-19) |
Re: Parsing an If...End If construct vbdis@aol.com (2004-11-19) |
Re: Parsing an If...End If construct cfc@shell01.TheWorld.com (Chris F Clark) (2004-11-20) |
From: | vbdis@aol.com (VBDis) |
Newsgroups: | comp.compilers |
Date: | 19 Nov 2004 00:54:06 -0500 |
Organization: | AOL Bertelsmann Online GmbH & Co. KG http://www.germany.aol.com |
References: | 04-11-047 |
Keywords: | parse |
Posted-Date: | 19 Nov 2004 00:54:06 EST |
mness1978@hotmail.com (Michael) schreibt:
>If X=10
> Print "Ten"
>Else If X=20
> Print "Twenty"
>Else If X=30
> Print "Thirty"
>Else
> End ' <-------- are you sure that this is acceptable???
>End If
Perhaps you misunderstood the "End" token as a statement?
At least I'd try to treat "End" as a special keyword, distinct from statements.
And I'd also try to convert "End If" into a single token, different from both
"End" and "If". AFAIR typical Basic byte code uses a single token herefore,
that's only displayed with a space inside the keyword.
IMO you also should handle NEWLINE appropriately. In Basic syntax the line ends
almost are significant parts of the syntax, serving e.g. as statement
separators. In your grammar a NEWLINE is not allowed within "statements", so
that an "Else" would be illegal at the begin of a line. I'd define an
statement_separator as either ":", or as NEWLINE possibly followed by an label.
All in all I'd implement an handcrafted lexer and parser for Basic, which
allows to handle the special conditions in a Basic syntax easier than with
general lexer/parser generators. I'd also look at the source code of an open
source Basic interpreter, in order to find out more about the Basic grammar,
lexers and parsers.
DoDi
Return to the
comp.compilers page.
Search the
comp.compilers archives again.