1.4.2. Выражения.
Арифметические выражения.
<арифметическое_выражение>::=[<знак>]<терм>|<арифметическое_
выражение><знак><терм>
<терм>::=<множитель>|<терм><*_или_/><множитель>
<*_или_/>::='*'|'/'
<множитель>::='('<арифметическое_выражение> )'|<константа>|<оператор_длина_вектора>|<переменная>
<знак>::='+'|'-'
<оператор_длина_вектора>::='length('<арифметическое_выражение>')'
<оператор_элемента_вектора>::=<идентификатор>'['
<константа_без_знака>']'
Логические выражения.
<условное_выражение>::=<условное_выражение>'||'<конъюнкция>|
<конъюнкция>
<конъюнкция>::=<конъюнкция>'&&'<выражение>|<выражение>
<выражение>::='!'<выражение>|'('<условное_выражение>')'|<выражение>
<логическая_операция><условное_выражение>|<условное_выражение>
<логическая_операция>::='>'|'<'|'=='|'!='|'>='|'<='
1.4.3. Описания.
Любое описание сопоставляет с описываемым понятием некоторый идентификатор - имя переменной.
1.5. Операторы.
1.5.1. Пустой оператор.
Синтаксис :
<пустой_оператор> ::= ;
Пустой оператор не производит никаких действий, однако он необходим в некоторых языковых конструкциях (например, для реализации бесконечного цикла).
1.5.2. Оператор присваивания.
Синтаксис :
<переменная>::=<идентификатор>|<оператор_элемента_вектора>
<оператор_присваивания>::=<переменная>{'='<переменная>}
'='<арифметическое_выражение>';'
Порядок выполнения оператора присваивания :
Вычисляется значение выражения в правой части, затем, справа налево, оно присваивается переменным в левой части, если тип значения и переменной совпадают. В противном случае присваивание не выполняется и пользователю выдается сообщение об ошибке.
1.5.3. Оператор перехода.
Синтаксис :
<оператор_безусловного_перехода>::='goto' <метка>';'
Оператор осуществляет безусловный переход к оператору, помеченому меткой. При отсутствии такового выдается сообщение об ошибке. Метка должна быть уникальной в пределах программы.
1.5.4. Оператор вывода.
Синтаксис :
<оператор_вывода>::='printf('<сообщение>| {','<сообщение>} ');'
<сообщение>::={<строка>|<арифметическое_выражение>}
<строка>::=' " '{<символ>}' " '
<символ>::=<любой_символ>
Оператор осуществляет вывод в стандартный поток вывода, связаный обычно с экраном дисплея, значения переменной <переменная>.
1.5.5. Оператор ввода.
Синтаксис :
<оператор_ввода>::='scanf(' <идентификатор> {','<идентификатор>} ');'
Оператор ввода осуществляет чтение из стандартного потока ввода (клавиатуры) значения.
1.5.6. Составной оператор.
Синтаксис :
<составной_оператор> ::= '{' {<оператор>} '}'
Операторы, входящие в состав составного оператора, выполняются в порядке их написания.
1.5.7. Условный оператор.
Синтаксис :
<условный_оператор>::='if('<условное_выражение>')'<оператор>
['else'<оператор>]
Вначале вычисляется <условное_выражение>. Если оно истинно, то выполняется первый <оператор> иначе второй оператор, если он присутствует.
1.5.8. Оператор цикла for.
Синтаксис :
<оператор_цикла>::='for(' [<оператор_присваивания> {','<оператор_присваивания>} ] ';' [<условное_выражение> {',<условное_выражение>' } ] ';' [<оператор_присваивания> {','<оператор_присваивания>} ] ')' <оператор>';'
Выполняется оператор <оператор>, пока истинны все условные выражения.
1.6. Программа.
Синтаксис :
<программа>::=[<глобальное_описание>] 'void main(){'[<локальное_описание>] <оператор> '}'
Полный синтаксис языка в модифицированной форме Бэкуса-Наура приведен в приложении 1.
Пример программы на входном языке приведен ниже.
/*глобальные описания*/
int i=10+15/2, j;
float f, f1=12+14.5e-2;
vector V[10], Vec[5]={1, 2, 3};
void main()
{
/*локальные описания*/
int key,flag=0;
float r;
label:
scanf(key,V[0]);
for (j=0;j<i;j=j+1) ;
if ( (!(j>=7)) && ((i==8)||(!j)) )
{
printf("i=",15*i);
flag=1;/* изменение флага*/
}
if (a===0) goto label;
if (flag) printf("Ok");
}