procedure expression() return case ?2 of { 1 : term() 2 : 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