An incremental parsing system for programming tools