Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

Завдання для самостійної роботи

1. Написати БНФ цілого числа.

2. Написати БНФ числа із плаваючою точкою.

3

технологія запису алгоритмів

за допомогою

мови програмування С

Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного

3.1. Елементи мови

Під елементами мови розумітимемо алфавіт, константи, ключові слова, ідентифікатори, коментарі.

Компілятор аналізує текст С-програми, послідовно зчитуючи рядки та розбиваючи їх на лексеми.

Означення 3.1. Лексема – це одиниця тексту програми, яка має для компілятора самостійний зміст і не містить інших лексем.

Жодні лексеми, крім символьних рядків, не можуть продовжуватись на кількох рядках тексту програми. Коли компілятор виявляє лексему, він намагається включити до неї максимальну кількість символів. Наприклад:

int i,j,k;

i=j+++k;//це еквівалентно i=(j++)+k;

В останньому рядку здійснюється аналіз компілятором неоднозначної конструкції +++ таким чином: спочатку розглядається перший +. Якщо б наступний символ був ідентифікатором, то цей + був би проінтерпретований як знак бінарної операції додавання. Однак наступний символ – ще один +, тому конструкція  розглядається як допустима постфіксна операція інкремента – ++. Третій + уже інтерпретується як знак операції додавання.

Алфавіт мови – це сукупність таких множин:

 великі та малі латинські літери;

 десяткові цифри;

 спеціальні символи (+, –, *, /, #, %, ^, &, *, (, ), |,?, :,; );

 зображувані символи (спеціальні, яким відповідає клавіша клавіатури). Наприклад: \t – табуляція, \n – новий рядок.

Константи бувають числовими, символьними та символьними рядками, числові константи – цілими та з плаваючою точкою. Цілі константи поділяються на:

Десяткові

<десяткове ціле>::=<цифра>{<цифра>}

Наприклад: 12345.

Вісімкові (утворюються за допомогою префікса 0)

<вісімкове ціле>::=0<вісімкова цифра>{<вісімкова цифра>}

Наприклад:

int i=023;

printf ("i=%d',i);//результат – 19.

Шістнадцяткові (утворюються за допомогою префікса 0x)

<шістнадцяткове ціле>::=0x<десяткова цифра>|

a|b|c|d|e|f|A|B|C|D|E|F {<десяткова цифра>|

a|b|c|d|e|f|A|B|C|D|E|F}

Наприклад:

int i=0x13;

printf("i=%d',i);//результат – 19.

Константи із плаваючою точкою синтаксично записуються як

[<цифри>].[<цифри>][e|E [-]<цифри>]

Наприклад: double f=123.2343e – 12.

Символьні константи записуються з використанням одинарних лапок: '<символ>'

Наприклад: 'd'.

Символьні рядки записуються за допомогою подвійних лапок:

<символи>"

Наприклад: "Hello, world!"

Символьна константа – це один символ, поміщений в одинарні лапки, наприклад 'а'. Значенням символьної константи є чисельне значення цього символу у внутрішньому машинному наборі символів. Наприклад, у наборі символів ascii символьний нуль '0' має значення 48, а в коді ebcdic – 240, і обидва значення відмінні від числа 0. Написання '0' замість чисельного значення, такого як 48 чи 240, робить програму незалежною від конкретного чисельного зображення символу в машині. Деякі неграфічні символи можуть бути зображені як символьні константи за допомогою умовних послідовностей, наприклад \n (новий рядок), \t (табуляція), \0 (нульовий символ), \\ (зворотна коса риска), ' (одинарні лапки) і т. д. Вони виглядають як два символи, але насправді є одним. Крім того, можна згенерувати довільну константу у вигляді '\ddd', де ddd – від однієї до трьох вісімкових цифр, як у наступному рядку програми:

#define A'\x41' /*це код символу А*/

або '\xff', де ff – одна чи дві шістнадцяткові цифри

#include <stdio.h>