Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lisa5;
- import praks7.parsers.Node;
- import praks7.parsers.Parser;
- // S → aR | c
- // R -> Sb | A
- // A → bAbQ | dQ
- // Q -> cQ | e
- public class SAParser extends Parser {
- public SAParser(String input) {
- super(input);
- }
- // S → aR | c
- protected Node s() {
- Node n = new Node("S");
- switch (peek()){
- case 'a':
- n.add(match('a'));
- n.add(r());
- break;
- case 'c':
- n.add(match('c'));
- break;
- default:
- expected('a', 'c');
- }
- return n;
- }
- protected Node r() {
- Node n = new Node("R");
- switch (peek()){
- case 'a':
- case 'c':
- n.add(s());
- n.add(match('b'));
- break;
- case 'b':
- case 'd':
- n.add(a());
- break;
- default:
- expected('a','c','b','d');
- }
- return n;
- }
- protected Node a() {
- Node n = new Node("A");
- switch (peek()){
- case 'b':
- n.add(match('b'));
- n.add(a());
- n.add(match('b'));
- n.add(q());
- break;
- case 'd':
- n.add(match('d'));
- n.add(q());
- break;
- default:
- expected('b','d');
- }
- return n;
- }
- protected Node q() {
- Node n = new Node("Q");
- switch (peek()){
- case 'b':
- case '$':
- n.add(epsilon());
- break;
- case 'c':
- n.add(match('c'));
- n.add(q());
- break;
- default:
- expected('b','$','c');
- }
- return n;
- }
- public static void main(String[] args) {
- Parser p = new SAParser("abdb");
- p.testParser();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement