BL Context-Free Grammar


Program Parse

program PROGRAM identifier IS
    { instruction }
BEGIN
    block
END identifier
 
instruction INSTRUCTION identifier IS
    block
END identifier

Statement Parse

block { statement }
 
statement if | while | call
 
if IF condition THEN
    block
[ ELSE
    block ]
END IF
 
while WHILE condition DO
    block
END WHILE
 
call identifier

Tokenizer

identifier letter { letter | digit | - }
 
letter a | b | ... | z | A | B | ... | Z
 
digit 0 | 1 | ... | 9
 
keyword BEGIN | DO | ELSE | END |
IF | INSTRUCTION | IS |
PROGRAM | THEN | WHILE
 
condition next-is-empty | next-is-not-empty |
next-is-wall | next-is-not-wall |
next-is-enemy | next-is-not-enemy |
next-is-friend | next-is-not-friend |
random | true

Note 1: The special symbols { and } mean that the enclosed sequence of symbols occurs zero or more times, and the special symbols [ and ] mean that the enclosed sequence of symbols occurs zero or one times.

Note 2: Even though the rewrite rules for identifier do not rule this out explicitly, keywords and conditions are not considered identifiers (as defined by the mathematical subtype IDENTIFIER in the StatementKernel interface).