Лекция: Входной язык С0

Язык С0 является очень упрощенным вариантом языка С. Знакомство с новым языком удобнее всего начинать с примера программы.

Пример 1. Программа «Коды символов». Задача: для каждого вводимого символа выводить на экран его десятичный и восьмеричный коды, перед которыми выводить знак равенства. Закончить работу при нажатии клавиши Esc или Ctrl-Break.

Если после запуска программы набирать, например, текст: " язык С0",

то на экране появится строка:

=32=4я=239=357з=167=247ы=235=353к=170=252 =32=40C=67=1030=48=60

При нажатии клавиши <Esc>, с кодом 27, программа прекращает работу.

Программа 1.С0-программа «Коды символов»

Можно написать и короче,

kod (x,baza) в стиле, характерном для С:

{ int y;

if ((y = x / baza) != 0) kod (x,baza)

kod (y,baza); { if (x >= baza)

putchar (x % baza + 48); kod (x/baza, baza);

} putchar (x % baza + 48);

int c; }

main () int c;

{ c=0; main ()

while (c != 27) { while ((c=getchar())!=27)

{ c = getchar (); { putchar (61);

putchar (61); kod (c,10);

kod (c,10); putchar (61);

putchar (61); kod (c,8);

kod (c,8); }

} }

}

Пояснения к программе «Коды символов». Рекурсивная функция kod выводит на экран (точнее, в стандартный выходной файл) целочисленное значение х в системе счисления с заданным основанием baza (2 £ baza £ 10).

Оператор putchar (x % baza + 48); выводит на экран младшую цифру числа x, имеющую значение x%baza (% — остаток от деления). Если x содержит более одной цифры, то перед этим с помощью рекурсивного вызова kod(x/baza,baza); выводится значение старших разрядов числа x, равное x/baza.

Например, если x=932 и baza=10, то сначала рекурсивный вызов функции kod выводит старшие разряды числа x, равные x/10=93, затем выводится младшая цифра x, равная x%10=2.

Переменная y в функции kod используется для демонстрационных целей, без нее можно обойтись. В правом столбце и аналогичной С0-программе функции putn в библиотеке языка С0 (приложение1) показано более короткое решение.

Число 61 используется в этой программе как код символа '=', 48 — код цифры ноль '0'.

Входной язык С0 является подмножеством языка С и содержит данные только целочисленного типа, без массивов. Разрешаются глобальные и локальные переменные, функции с параметрами, рекурсия.

Параметры функций могут быть только входными (ввиду отсутствия операции получения адреса). Поэтому результат работы функции передается только в виде ее значения или присваивается глобальной переменной. В отличие от языка С, параметры не описываются (в языке С нет и стандартной функции putn).

Имеются следующие операторы: оператор-выражение, составной оператор, сокращенный условный оператор (if без else), цикл с предусловием, оператор возврата.

Оператор-выражение представляет собой выражение, заканчивающееся точкой с запятой:

выражение;

Условный оператор используется для организации ветвлений. В языке С0 разрешен только сокращенный условный оператор:

if (выражение) оператор

Для организации повторяющихся действий используется цикл с предусловием:

while (выражение) оператор

Выражение в операторах if и while считается истинным, если оно не равно нулю. Внутри операторов if и while разрешено использовать только один оператор. Если в этом месте требуется написать последовательность из нескольких операторов, используется составной оператор, т. е. последовательность операторов, заключенная в операторные скобки { и }:

{ оператор_1… оператор_n }

Эти скобки превращают последовательность операторов в один составной оператор. В некоторых языках для этой цели используются служебные слова begin и end.

Оператор возврата завершает выполнение подпрограммы (функции) и задает значение функции (если она обладает значением):

return [выражение];

В выражениях допускаются:

· арифметические операции: +, -, *, /, %,

· сравнения: ==, !=, <, >, <=, >=,

· присваивание =,

· скобки ().

Отсутствующие в языке C0 логические операции И и ИЛИ можно заменить арифметическим умножением и сложением, соответственно.

Примечания.

1. Cлужебные слова int, if, while, return пишутся строчными буквами.

2. Длина имени не ограничена, но учитываются не более 8 символов.

3. Отсутствующий оператор return в конце описания функции вставляется автоматически.

Грамматика языка С0.

программа ::= {oписание-переменных | описание-функции}...

описание-переменных ::= int имя [, имя]...;

описание-функции ::= имя ( [имя[, имя]...] )

{ [описание-переменных]...[оператор]… }

оператор ::= [выражение]; | { [оператор]… } |

if (выражение) оператор | return [выражение];

while (выражение) оператор

выражение ::= терм [{ + | — | * | / | % | < | > | <= |>= | == | != | = } терм]...

терм ::= число | имя | имя ([выражение[, выражение]...]) |

— терм | (выражение)

имя ::= буква [буква|цифра]...

число ::= цифра ...

буква ::= 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

Эта грамматика описывает не только синтаксис, но и лексику языка С0. К лексике относятся четыре последних правила.

Стандартные функции языка С0. Библиотека std.asm (приложение 1) присоединяется к программе на этапе ее ассемблирования и содержит следующие стандартные функции (все они кроме putn имеются и в языке С).

getchar () Вводит с клавиатуры символ с отображением на экране и выдает в качестве значения его код. Реагирует на Ctrl-Break.

getch() Вводит с клавиатуры символ без отображения на экране и выдает в качестве значения его код. Реагирует на Ctrl-Break.

putchar (x) Выводит на экран символ с кодом х. Не имеет значения.

putn (x) Выводит на экран целoе значение х. Не имеет значения.

 

еще рефераты
Еще работы по информатике