Пробелы
Пробел - любая последовательность пробелов, символов табуляции или новой строки. Может появляться между любыми знаками. Каждое утверждение заканчивается точкой с запятой «;».
Константы
Числовые константы записываются в стандартной научной нотации: необязательный знак, последовательность цифр, которая может содержать десятичную точку, и необязательное поле экспоненты, которое начинается с одной из букв d, D, e или E, как в 1.23D-45. Вся арифметика в AMPL имеет двойную точность. Поэтому все обозначения экспоненты являются синонимами.
Литеральный набор
Литеральный набор - это строки, разделенные 'одинарными' или "двойными" кавычками. Символ-разделитель должен быть удвоен, если он появляется внутри литерала, 'x'y', содержащего три символа x'y. Cимвол новой строки n может появляться внутри литерала, только если ему предшествует знак «\». Выбор разделителя произвольный. ’Abc’ или "abc" обозначают один и тот же литерал. Литералы отличаются от числовых констант: 1 и '1' разные значения.
Комментарии
Комментарии начинаются с «#» и продолжаются до конца текущей строки или ограничиваются конструкцией «/*..*/». В этом случае литералы могут простираться на несколько строк и не вкладываться в действующее ограничение AMPL по количеству символов в одной строке. Комментарии могут появляться, где угодно в объявлениях, командах и данных.
Типы объектов модели
Модели AMPL включают в себя переменные, ограничения и целевые функции, выраженные с помощью наборов и параметров. Переменные, ограничения и целевые функции, называются объектами модели.
Имена объектов
Каждый объект модели имеет буквенно-цифровое имя. (Лексический состав) Имя - это строка из любой последовательности букв Unicode UTF-8, цифр и символов нижнего подчеркивания «_», которую нельзя принять за числовую константу.
Объекты модели
Объявления объектов модели имеют следующую общую форму:
entity name [aliasopt indexingopt bodyopt];
где name - это буквенно-цифровое имя, которое ранее не было присвоено объектам модели, alias - обозначает необязательный литерал, indexing - необязательное выражение индексации, а body - одно из ключевых слов. Entity использует зарезервированные слова для объявления различных типов объектов модели.
Объявления могут появляться в любом порядке, за исключением того, что каждое имя должно быть объявлено перед его использованием. Для объявлений переменных, ограничений и целей разрешена специальная форма выражения индексации: {if lexpr}
Если логическое выражение lexpr истинно, то получается простой (без индекса) результат. В противном случае объект исключается из модели, и последующие попытки ссылаться на него вызывают сообщение об ошибке. Например, следующее объявление включает в модель переменную v_Test, если параметру Testing было присвоено значение больше 100:
param Testing; var v_Test {if Testing > 100}>=0;