Related articles |
---|
BNF for a BASIC compiler mness1978@hotmail.com (Michael Ness) (2002-09-29) |
Re: BNF for a BASIC compiler snicol@apk.net (Scott Nicol) (2002-10-13) |
Re: BNF for a BASIC compiler michael@moria.de (Michael Haardt) (2002-10-13) |
Re: BNF for a BASIC compiler the-xogos@ifrance.com (antoine) (2002-10-13) |
From: | "Michael Ness" <mness1978@hotmail.com> |
Newsgroups: | comp.compilers |
Date: | 29 Sep 2002 16:59:34 -0400 |
Organization: | Compilers Central |
Keywords: | Basic, parse, question |
Posted-Date: | 29 Sep 2002 16:59:34 EDT |
Here is my first attempt at a defining a grammer using BNF. Is this the
way BNF should look? Can anyone point out any mistakes I'm making? One
thing that I am concerned about is the two token statment "END IF". Is
this legal in a LALR(1) parser? What about the <identifier> =
<expression> assignment with a single "="? Is it possible to not
confuse this with the <expression> = <expression> boolean test?
------------------------------------------------------------------------
<program> ::= <lines>
<lines> ::= <line><lines> |
<line>
<line> ::= NUM <statements> CR |
LABEL <statements> CR |
<statements> CR |
CR
<statements> ::= <statement> COLON <statements> |
<statement>
<statement> ::= IF <boolean> GOTO <label> [ ELSE <statements> ] |
IF <boolean> THEN <statements> [ ELSE <statements> ] |
IF <boolean> <statements> [ ELSE <statements> ] ENDIF |
FOR <identifier> = <expression> TO <expression> [ STEP <expression> ] |
WHILE <boolean> <statements> WEND |
REPEAT <statements> UNTIL <boolean> |
DO <statements> LOOP |
EXIT IF <expression> |
INPUT <identifier> |
PRINT <expression> |
? <expression> |
GOTO <label> |
LET <identifier> = <expression> |
<identifier> = <expression> |
END |
<empty>
<empty> ::= NULL
<label> ::= <expression> |
<identifier>
<expression> ::= <term> + <expression> |
<term> - <expression>
<term> ::= <factor> * <term> |
<factor> / <term>
<factor> ::= ( <expression ) |
<identifier> |
<number>
<identifier> ::= <letter> { <letter> | <number> } |
<letter> ::= A-F | a-f | "_"
<number> ::= 0-9
<boolean> ::= <expression> > 0 |
<expression> = <expression> |
NOT <identifier> = <identifier> |
<expression> > <expression> |
<expression> < <expression> |
<expression> >= <expression> |
<expression> <= <expression>
------------------------------------------------------------------------
Thanks,
Mike
Return to the
comp.compilers page.
Search the
comp.compilers archives again.