semantic analysis of programs