Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
01.05.2014
Размер:
76.8 Кб
Скачать

1.3.4. Идентификаторы.

Идентификаторы используются в качестве имен для обозначения переменных, имен констант и меток.

Синтаксис :

<идентификатор>::=<буква> {<буква>|<цифра>}

<буква>::='_'|'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|

|'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'

<цифра>::='0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'

Строчные и заглавные буквы различаются. Ограничение на длину: длина идентификатора не может быть больше 30 символов.

1.3.5. Константы.

Константы подразделяются на целые и вещественые. Значение константы определяется единожды и не может изменяться.

<константа>::=<константа_без_знака>

<знак>::='+'|'-'

<константа_без_знака>::=<имя_константы>|<число_без_знака>

<имя_константы>::=<идентификатор>

<число_без_знака>::=<целое_без_знака>['.'<целое_без_знака>]['E'<знак>

<целое_без_знака>]

<целое_без_знака>::=<цифра>{<цифра>}

1.3.6. Ключевые слова.

Следующие ключевые слова считаются зарезервированными и не могут использоваться в качестве идентификаторов:

int float void main goto length for if else scanf printf vector const

Ключевые слова воспринимаются как единые символы с фиксированным смыслом, который задан в определении языка.

1.3.7. Строки.

Строками считаются последовательность любых символов, заключенных в

"кавычки" .

1.4. Описания и типы.

1.4.1. Целый тип.

Целочисленный знаковый тип int : размер 2 байта, диапазон -32768..32767.

Вещественный тип float : размер 4 байта, диапазон +-3.4*10**(+-38)

Тип вектора vector с вещественными компонентами: максимальное число компонент 16383.

Операции:

Оператор

тип оператора

допустимые типы параметров

+

унарный

int, float, vector

-

унарный

int, float, vector

+

бинарный

int, float, vector

-

бинарный

int, float, vector

*

бинарный

int, float, vector

/

бинарный

int, float

[ ]

унарный

vector

Length

унарный

vector

&&

бинарный

int

||

бинарный

int

==, !=, <, >, <=, >=

бинарные

int, float

!

унарный

int

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");

}

Соседние файлы в папке Курсовая работа2