GDL 与 GPD 预处理之间的差异
GDL 中有四个新的预处理器指令在 GPD 实现中不存在: #PreCompiled、 #UndefinePrefix、 #EnablePPDirective和 #DisablePPDirective。
此外, #Undefine 指令现在也不接受任何参数。 缺少 参数意味着最近定义的符号未定义,这会还原以前定义的符号。
如果 GDL 文件也打算由 GPD 分析程序分析,建议不要使用这些新指令。 如果希望 tp 将新的预处理器指令合并到也供 GPD 分析程序使用的 GDL 文件中,则必须提供备用 (向后兼容性) 路径,使旧预处理器能够避免执行这些新指令。 每个路径都应包含在 #Ifdef:、#Else、#Endif 构造中,如以下代码示例所示。
#Ifdef: NewParserVersion
*% Use new preprocessor directives if the parser supports them.
*% Lock out this entire code path by changing the prefix.
#SetPPPrefix: #New_
#New_PreCompiled: ...
*% Actually might use a mixture of old and new directives!
#New_UndefinePrefix:
#Else:
*% Otherwise only use the original set of directives.
#OldDirectives: ...
#Endif:
此外,在运行新指令分叉时,应将预处理器前缀设置为不同的前缀。 如果遇到前缀错误的指令,分析程序将发出警告。