Структуру модуля на языке БНФ можно представить следующим образом:
$ Sub = ident ";" [ImportList]
{ DeclarationSequence | ClassDeclaration | InterfaceDeclaration | DelegateDeclaration | EnumDeclaration} BEGIN [StatementSequence] END SUB ident "."
$ ImportList = IMPORT import {"," import} ";"
$ import = ident
$ DeclarationSequence = Declaration { ";" Declaration )
$ Declaration = { ConstantDeclaration } | { VariableDeclaration } | { ProcedureDeclaration} | { FunctionDeclaration }
Модуль - это набор определений и последовательность операторов, инициализирующих модуль.
Модуль является основной синтаксической единицей языка. Каждый модуль представляет собой конечную последовательность символов из словаря языка. Для написания кода модулей допустимо использовать любые символы Юникод, кроме служебных символов (символы с кодами U0000-U0008, U000B, U000C, U000E-U001B) и последовательности символов ]]> (связано с особенностью хранения текста модулей/форм в платформе).
Примечание. Если в коде модуля присутствует один или более запрещенный символ, то при сохранении/компиляции модуля будет выведено соответствующее сообщение об ошибке.
Модуль может импортировать описания из других модулей посредством списка импорта. При обращении к переменным и методам, определенным в импортируемом модуле, можно использовать синтаксис квалифицированных идентификаторов, где в качестве префикса используется имя импортируемого модуля, также можно указывать идентификатор и без использования префикса.
В модуле содержится набор блоков описаний. Для каждого блока описаний модуль является объемлющим блоком. Блок описаний может состоять из других блоков описаний и является объемлющим по отношению к вложенным блокам. В каждом блоке описаний любой идентификатор может быть описан только один раз. При использовании идентификатора используется первое его описание по списку объемлющих блоков, начиная с самого внутреннего блока, где этот идентификатор используется.
Блок описаний из импортируемого модуля является объемлющим по отношению к данному модулю.
Язык позволяет выполнить некоторую последовательность операторов при загрузке модуля в систему, инициализирующих его. Данная последовательность операторов указывается после ключевого слова BEGIN в теле модуля.
Примечание. Для написания кода модуля используются любые символы Юникод.
Приведем пример простейшего модуля программы:
Sub Main; // Объявление начала модуля Main
Var // Секция описания переменных
c: Integer; // Описание переменной типа Integer
Begin // Начало текста программы
c := 0;
If c < 10 Then
c := c + 1;
End If;
End Sub Main; // Объявление конца модуля Main