
Worked-out Problems 465
1. E -> T {+T} 4. P -> (E) | a | b | empty
2. T -> F {F}
3. F -> P {*P}
A skeleton RDP for the grammar:
pE(){pT(); while(next() == ’+’){pplus(); pT();}}
pT(){pF(); while(strchr(next(),"(ab+"){pF();}}
pF(){pP(); while(next() == ’*’{past();pP();}}
pP(){if(next() == ’(’){plp(); pE(); prp();}
else if(next() == ’a’) pa();
else if(next() == ’b’) pb();
else error("unexpected token");
}
pplus(){if(symbol() != ’+’) error("+ expected");}
past(){if(symbol() != ’*’) error("* expected");}
plp(){if(symbol() != ’(’) error("( expected");}
prp(){if(symbol() != ’)’) error(") expected");}
pa(){if(symbol() != ’a’) error("a or b expected");} ...