Compilers (Continued)

Overview


Parser Actions


Parser that Prints Substitutions in a Derivation


Parser that Generates a Concrete Parse Tree



Building Abstract Trees for Expressions



Expression Grammar Parser That Outputs Stack Machine Code

-- Parser that generates stack machine code
procedure E() is begin
   T();
   while currentToken() is '+' or '-' loop
      advanceToken();
      T();
      generate("ADD"/"SUB");
   end loop;
end E;

procedure T() is begin
   F();
   while currentToken() is '*' or '/' loop
      advanceToken();
      F();
      generate("MUL"/"DIV");
   end loop;
end T;

procedure F() is begin
   if currentToken() is 'a' or 'b'
      advanceToken();
      generate("PUSH a/b");
   else
      print("error");
      exit;
end F;


Stack Machine Example



Can We Always Write a Recursive Descent Parser



FIRST Sets



FOLLOW Sets


Table Driven Implementation of RD Parser