50 lines
587 B
Plaintext
50 lines
587 B
Plaintext
|
grammar bf;
|
||
|
|
||
|
program
|
||
|
: statements EOF;
|
||
|
|
||
|
statements
|
||
|
: eligibleStmt*;
|
||
|
|
||
|
eligibleStmt
|
||
|
: stmt
|
||
|
| numberedStmt
|
||
|
;
|
||
|
|
||
|
numberedStmt
|
||
|
: stmt NUMBER
|
||
|
;
|
||
|
|
||
|
stmt
|
||
|
: basicStmt
|
||
|
| loopStmt
|
||
|
;
|
||
|
|
||
|
|
||
|
loopStmt
|
||
|
: LOOPSTART statements LOOPEND
|
||
|
;
|
||
|
|
||
|
basicStmt
|
||
|
: INC # ptrIncr
|
||
|
| DEC # ptrDecr
|
||
|
| LEFT # ptrLeft
|
||
|
| RIGHT # ptrRight
|
||
|
| INPUT # inputStmt
|
||
|
| OUTPUT # outputStmt
|
||
|
;
|
||
|
|
||
|
|
||
|
LOOPSTART: '[';
|
||
|
LOOPEND:']';
|
||
|
NUMBER: [0-9]+;
|
||
|
INPUT: ',';
|
||
|
OUTPUT: '.';
|
||
|
DEC: '-';
|
||
|
INC: '+';
|
||
|
LEFT: '<';
|
||
|
RIGHT: '>';
|
||
|
EVERYTHING_ELSE: . ->channel(HIDDEN);
|
||
|
WS: [ \r\n] -> skip;
|
||
|
|