B<NAME>=1
B<CNST>=2

P<SS>=  <UI><SEP>,
        '%IF'<SC><COND>'%THEN'<UI><ELSE><SEP>,
        <CNST>':'<SS>,
        '%FINISH'<ELSE><SEP>,
        '%INTEGER'<ARR><SEP>,
        <RT><SPEC><NAME><FPP><SEP>,
        '%END'<SEP>,
        '%BEGIN'<SEP>,
        '%ENDOFPROGRAM'<SEP>,
        <SEP>;

P<UI>=  <NAME><APP><ASS>,
        '->'<CNST>,
        '%START',
        '%RETURN',
        '%RESULT='<+-\><OPD><EXPR>,
        '%STOP';

P<ELSE>='%ELSE'<UI>,;

P<SEP>= '
',';';

P<APP>= '('<+-\><OPD><EXPR><EXPS>')',;

P<+-\>= '+','-','\',;

P<OPD>= <NAME><APP>,<CNST>,'('<+-\><OPD><EXPR>')';

P<EXPR>=<OP><OPD><EXPR>,;

P<OP>=  '<<','>>','&','!!','!','**','/','*','+','-';

P<EXPS>=','<+-\><OPD><EXPR><EXPS>,;

P<ASS>= '='<+-\><OPD><EXPR>,;

P<SC>=  <+-\><OPD><EXPR><COMP><+-\><OPD><EXPR>,'('<SC><COND>')';

P<COND>='%AND'<SC><ANDC>,'%OR'<SC><ORC>,;

P<ANDC>='%AND'<SC><ANDC>,;

P<ORC>= '%OR'<SC><ORC>,;

P<COMP>='=','\=','<=','<','>=','>';

P<ARR>= '%ARRAY'<NAME><NAMS>'('<+-\><OPD><EXPR>':'<+-\><OPD><EXPR>')',
        <NAME><NAMS>;

P<NAMS>=','<NAME><NAMS>,;

P<RT>=  '%ROUTINE','%INTEGERFN';

P<SPEC>='%SPEC',;

P<FPP>= '(%INTEGER'<ARRN><NAME><NAMS><FPS>')',;

P<ARRN>='%ARRAYNAME','%NAME',;

P<FPS>= ',%INTEGER'<ARRN><NAME><NAMS><FPS>,;

E