add compiler principles