50 lines
587 B
ANTLR
50 lines
587 B
ANTLR
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;
|
|
|