Поделиться через


Различия между предварительной обработкой 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:

Кроме того, префикс препроцессора должен иметь другое значение при выполнении новой вилки директив. Средство синтаксического анализа будет предупреждать, если он столкнется с директивами с неправильным префиксом.