.SYNTAX PROGRAM

PROGRAM = '.SYNTAX' .ID .OUT('ADR ' *)
          $ ST
          '.END' .OUT('END') ;

ST = .ID .LABEL * '=' EX1 ';' .OUT('R') ;

EX1 = EX2 $ ( '|' EX2 .OUT('BT ' *)
                      .LABEL * ) ;

EX2 = EX3 $ EX3 ;

EX3 = .ID .OUT('CLL ' *)
    | .STRING .OUT('TST ' *)
    | '.ID' .OUT('ID')
    | '.NUMBER' .OUT('NUM')
    | '.STRING' .OUT('SR')
    | '(' EX1 ')'
    | '.EMPTY' .OUT('SET')
    | '$' .LABEL * EX3 .OUT('BT ' *) .OUT('SET')
    ;

OUTPUT = '.OUT' '(' $ OUT1 ')' ;

OUT1 = .STRING .OUT('CL ' *)
     | '*' .OUT('CI')
     ;

.END
