An editor that is aware of the syntactic, semantic and in some cases the structural rules of a specific programming language and provides a framework for the user to enter source code. Programs or changes to previously stored programs are incrementally parsed into an abstract syntax tree and automatically checked for correctness.