added semantic analyzer