4.3BSD/usr/contrib/icon/port/pret3.icn

#  This program tests lib/pret.s.

procedure main()
   i := 0
   while i < 5 do {
      write(expression())
      i +:= 1
      }
end

procedure expression()
   return case ?3 of {
      1  :  term()
      2  :  term()
      3  :  term() || "+" || expression()
      }
end

procedure term()
   return case ?2 of {
      1  :  element()
      2  :  element() || "*" || term()
      }
end
procedure element()
   return case ?4 of {
      1  :  "x"
      2  :  "y"
      3  :  "z"
      4  :  "(" || expression() || ")"
      }
end