简短的回答是,当您编译时,您将程序翻译成机器理解的语言。你在这里问两个不同的问题,所以让我给你一个简单的答案:例如,如果你是唯一一个使用该程序的人,你不需要编译。但是为了让您的程序得到优化(因为它已经在机器语言级别)并且保证没有人弄乱您的逻辑,我们编译代码并且通常不允许常规用户访问源代码。
第二个问题,语法检查器是如何工作的,我相信对Google来说更好,并选择一些文章来阅读编译器。它们很复杂,但简而言之,它们所做的就是将Progress所期望的全部操作命令与您的工作进行比较。例如,如果你做了
Find first customer where customer.active = yes no-error.
进度将检查客户是否是表,如果customer.active是该表中的字段,是否是逻辑类型,因为如果是,则过滤,并且如果您的整个条件可以转换为单个true或false布尔值值。它继续检查你是否指定了一个锁(如果你没有,则默认为共享,就像在我的例子中,顺便说一句,这是禁止的),如果有多个记录会发生什么(因为我先说了,然后得到第一个),最后如果失败会发生什么。如果检查find语句,还有更多选项可以自定义它,编译器只会将您对语句的使用与Progress可以使用的语句进行比较。并且如果不能收集所有错误。这就是有时编译器会给你通用消息的原因。既然他们不知道你要做什么,他们所能做的就是告诉你你所写的内容基本上是错的。
希望这有助于您理解。
编译的r代码的好处包括:
对于“它如何找到错误并显示消息” - 在高层次上它就像任何编译器一样。它根据语法树评估提供的源,并在违反规则时通知您。编译器设计和构造是一个相当高级的主题,可能不适合简单的SO问题 - 但如果你有一些更具体的东西可以独立作为一个人可能能够提供帮助的问题。