Короткий ответ: когда вы компилируете, вы переводите свою программу на язык, понятный машине.Здесь вы задаете два разных вопроса, поэтому позвольте мне дать вам простой ответ на первый: вам НЕ НУЖНО компилировать, например, если вы единственный, кто использует программу.Но чтобы оптимизировать вашу программу (поскольку она уже находится на уровне машинного языка) и гарантировать, что никто не вмешивается в вашу логику, мы компилируем код и обычно не разрешаем обычным пользователям доступ к исходному коду.
Второй вопрос: как работает средство проверки синтаксиса, я полагаю, вам лучше было бы обратиться в Google и выбрать несколько статей для чтения о компиляторах.Они сложны, но, в двух словах, они берут то, что Progress ожидает как полные, оперативные команды, и сравнивают с тем, что вы делаете.Например, если вы выполните команду
Find first customer where customer.active = yes no-error.
Progress, проверьте, является ли customer таблицей, является ли customer.active полем в этой таблице, является ли это логическим типом, поскольку вы фильтруете, если даи, если все ваши условия могут быть переведены в одно истинное или ложное логическое значение.Далее проверяется, указали ли вы блокировку (и, по умолчанию, на общую, если у вас нет, как в моем примере, что, кстати, нет-нет), что происходит, если существует несколько записей (так как я сказал сначала, а затем получить только первый) и, наконец, что произойдет, если это не удается.Если вы проверите оператор find, есть другие опции для его настройки, и компилятор просто сравнит использование вами оператора с тем, что может иметь для него Progress.И собирать все ошибки, если не может.Вот почему иногда компиляторы будут давать вам общие сообщения.Так как они не знают, что вы пытаетесь сделать, все, что они могут сделать, это сказать вам, что в основном не так с тем, что вы написали.
Надеюсь, это поможет вам понять.