A Language-Adaptive Programming Environment Based on a Program Analyzer and a Structure Editor