syntax & type-checker