Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Входной язык С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е значение х. Не имеет значения.





Дата публикования: 2015-03-29; Прочитано: 293 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...