| Assignment 5 solutions
    
     Part of 
      
      the homework for 22C:50, Summer 2004
      
     
      | 
12) Modify the parser shown in Figure 5.9 so it generates output in this assembly language.
		procedure expression;
		var more: boolean;
		    op: char;                             {--added--}
		begin
		     op = ' '; {initially, no operator }  {--added--}
		     repeat
			  if lex = '(' then begin
			       lex_scan;
			       expression;
			       if lex = ')' then lex_scan else error;
			  end else begin
			       value;
			  end;
			  case operator of                {--added--}
			   ' ': {no operation!};          {--added--}
			   '+': writeln(' ADD');          {--added--}
			   '-': writeln(' SUB');          {--added--}
			   '*': writeln(' MUL');          {--added--}
			   '/': writeln(' DIV');          {--added--}
			  end;                            {--added--}
			  more := lex in ['+','-','*','/'];
			  op = lex;                       {--added--}
			  if more then lex_scan;
		     until not more;
		end {expression};
assign(i,times(plus(i,1),times(j,2)));
#define assign(var,val) var = (val) #define times(v1,v2) ((v1) * (v2)) #define add(v1,v2) ((v1) + (v2))
MOVE src,dst
The result should be identical to having written this:
W src W dstWrite a macro, using the macro notation presented in Chapter 6, that will produce this result.
MACRO MOV,src,dst W src W dst ENDMAC