Различия между предварительной обработкой GDL и GPD
В GDL есть четыре новые директивы препроцессора, которые не существовали в реализации GPD: #PreCompiled, #UndefinePrefix, #EnablePPDirective и #DisablePPDirective.
Кроме того, директива #Undefine теперь также не принимает аргументов. Отсутствие аргумента означает, что последний определенный символ не определен, что восстанавливает ранее определенный символ.
Мы не рекомендуем использовать эти новые директивы, если GDL-файл также предназначен для синтаксического анализа GPD. Если вы хотите включить новые директивы препроцессора в GDL-файл, который также предназначен для использования средствами синтаксического анализа GPD, необходимо указать альтернативный путь (обратная совместимость), позволяющий старому препроцессору избежать выполнения этих новых директив. Каждый путь должен быть заключен в конструкцию #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:
Кроме того, префикс препроцессора должен иметь другое значение при выполнении новой вилки директив. Средство синтаксического анализа будет предупреждать, если он столкнется с директивами с неправильным префиксом.