Лекции по конструированию компиляторов глава 4 промежуточные представления программы