9. Компилация и управление на компилацията
55
При (*$I+*) използването на стандартната функция IOresult е безсмислено,
защото програмата ще преустанови изпълнението си (по входно/изходна грешка),
преди да се изпълни обръщението към функцията IOresult.
9.1.2. Modula-2 в UniPascal (*$M-*)
Ключът M превключва два възможни синтаксиса на операторите в UniPascal.
Когато е изключен, за компилатора са валидни операторите, описани в предходните
глави на този документ. Когато е включен, компилаторът третира операторите, като
такива от език, подобен на Modula-2. Тук ще дадем само синтактичните правила на
операторите на UniPascal при използване на директивата (*$M+*).
StatementList =
Statement {';' Statement }.
IfStatement =
'if' Expression 'then'
   StatementList {
'elsif' Expression 'then'
   StatementList } [
'else'
   StatementList ]
'end'.
CaseStatement =
'case' Selector 'of'
   ['|']{ CnstList ':' StatementList '|'}
   ['else' ':' StatementList ]
'end'.
WhileStatement =
'while' Expression 'do'
 StatementList
'end'.
RepeatStatement =
'repeat' Statemen {';'
 Statement }
'until ' Expression.
ForStatement =
'for' Variable ':=' Expression ('to'|
'downto') Expression 'do'
 StatementList
 'end'.
WithStatement =
'with' VariableRef {',' VariableRef } 'do'
   StatementList
'end'.
Block =
[ Declarations ]
'begin'
   Statement { ';'
   Statement }
'end' ident.
Както се вижда, отпада необходимостта от съставния оператор (BEGIN ... END) и
той вече не съществува. Затова пък всеки сложен оператор завършва с END.
Операторът REPEAT ... UNTIL не се променя, а синтаксисът му е даден само за пълнота.
Освен смяната на синтаксиса, използването на (*$M+*) довежда и до появата на нова
ключова дума - ELSIF. И последната промяна: след ключовата дума END в края на тялото
на процедура, функция, модул или програма трябва да стои идентификаторът (името)
<<  <  GO  >  >>

Вернуться к началу сайта