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).