Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_L2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
61.54 Кб
Скачать

Лекція 2 Лексика мови

План

    1. Кодування

    2. Аналіз програми

      1. Пробіли

      2. Коментарі

      3. Лексеми

    3. Види лексем

      1. Ідентифікатори

      2. Ключові слова

      3. Літерали

        1. Цілочислові літерали

        2. Дробові літерали

        3. Логічні літерали

        4. Символьні літерали

        5. Рядкові літерали

        6. Null літерал

        7. Розділювачі

        8. Оператори

        9. Висновок

    4. Доповнення: робота з операторами

      1. Оператори присвоєння і порівняння

      2. Арифметичні операції

      3. Логічні оператори

      4. Бітові операції

    5. Висновок

Лексика мови

Лексика описує, зчого складається текст програми, як він записується, і на які найпростіші слова (лексеми) компілятор розбиває програму при аналізі. Лексеми (або tocens– англійською мовою) – це основні “цеглинки”, з яких будується будь-яка програма мовою Java. Ця тема розкриває багато деталей внутрішнього влаштування мови і є досить важливою.

    1. Кодування

Технологія Java, як платформа для Глобальної мережі Інтернет, повинна бути багатомовною, а значить звичайного набору символів ASCII (American Standard Code for Information Interchange, Американський стандартний код обміну інформацією), який складається лише з латинського алфавіту, цифр і найпростіших спеціальних знаків (дужки, знаки пунктуації, арифметичні операції та ін.) не достатньо. Тому для запису тексту програми застосовується більш універсальне кодуванняUnicode.

Як відомо,Unicode представляє символи кодом з двох байтів, описуючи таким способом 65536 символів. Це дозволяє підтримувати практично всі розповсюджені мови. Однак зрозуміло, що потрібне спеціальне позначення, щоб задавати в програмі будь-який символ Unicode, адже ніяка клавіатура не дозволяє вводити більше 65 тисяч різних знаків. Ця конструкція представляє символ Unicode, використовуючи тільки символи ASCII. Наприклад, якщо в програму потрібно вставити знак з кодом 6919, необхідно його представити в шістнадцятковому форматі(1B05) і записати:

\u1B05

Причому букваuповинна бути малою, а шістнадцяткові цифри A, B, C, D, E, F можна використовувати довільно, як великі, так і малі. Так можна закодувати всі символиUnicode від \u0000 до \uFFFF. Букви російського алфавіту починаються з \u0410 (тільки буква Ё має код \u0401) по \u44F (код букви ё \u0451). В останніх версіяхJDK до складу демонстраційних програм и аплетів водить невелика програма SymbolTest, яка дозволяє проглядати весь набір символівUnicode. Її аналог нескладно написати самостійно. Для перекодування великих текстів служить утилітаnative2ascii, яка також входить до складуJDK. Вона може працювати як в прямому режимі – переводити з різноманітних кодувань вUnicode, записанийASCII-символами, так і в зворотному (опція – reverse) – зUnicode в стандартне кодування операційної системи.

У версіях мови Java до 1.1 застосовувався Unicode версії 1.1.5, в останньому випуску 1.4 використовується 3.0. Так Java слідкує за розвитком стандарту і базується на сучасних версіях. Для довільноїJDK точну версіюUnicode, яка використовується в ній, можна взнати з документації до класуCharacter. Офіційний веб-сайт стандарту, де можна одержати додаткову інформацію – http://www.unicode.org/.

Отже, використовуючи найпростіше кодування ASCII, можна ввести будь-яку послідовністьUnicode символів. Далі вказано, щоUnicode використовується не для всіх лексем, а тільки для тих, для яких важлива підтримка багатьох мов, а саме: коментарі, ідентифікатори, символьні і рядкові літерали. Для запису решти лексем цілком досить тількиASCII символів.

    1. Аналіз програми

Компілятор, аналізуючи програму, зразу поділяє її на

  • пробіли (white spaces)

  • коментарі (comments)

  • основні лексеми (tokens).

1.2.1. Пробіли

Пробілами в даному випадку називають всі символи, які поділяють текст програми на лексеми. Це як сам символ пробілу (spaсe, \u0020, десятковий код 32), так и знаки табуляції і переведення рядка. Вони використовуються для розділення лексем, а також для оформлення коду, щоб його було легше читати. Наприклад, наступна частина програми (обчислення коренів квадратного рівняння):

doublea = 1, b = 1, c = 6;

double D = b * b – 4 * a * c;

if (D >= 0) {

double x1 = ( -b + Math.sqrt (D)) / (2 * a);

double x1 = ( -b - Math.sqrt (D)) / (2 * a);

}

можна записати й у такому вигляді:

double a = 1, b = 1, c = 6; double D = b * b – 4 * a * c; if (D >= 0) {double

x1 = ( -b + Math.sqrt (D)) / (2 * a); double x1 = ( -b - Math.sqrt (D)) / (2 * a);}

В обох випадках компілятор згенерує абсолютно однаковий код. Єдине міркування, якого повинен дотримуватися розробник – легкість читання й подальшої підтримки такого коду.

Для розбиття тексту на рядки в ASCII використовуються два символи – “повернення каретки” (carriagereturn, CR, \u000d, десятковий код 13) і символ нового рядка (linefeed, LF, \u000a, десятковий код 10). Щоб не залежати від особливостей використовуваної платформи, вJava застосовується найгнучкіший підхід. Завершенням рядка вважається

  • ASCII-символLF, символ нового рядка;

  • ASCII-символCR, “повернення каретки”;

  • символ CR, за яким зразу ж знаходиться символLF.

Розбиття на рядки важливе для коректного розбиття на лексеми (як уже говорилось, завершення рядка також служить розділювачем між лексемами), для правильної роботи з рядковими коментарями (див. наступну тему “Коментарі”), а також для виведення налагоджувальної інформації (при виведенні помилок компіляції і часу виконання вказується, на якому рядку початкового коду вони виникли).

Отже, пробілами вJava вважаються:

  • ASCII-символSP, space, пробіл, \u0020, десятковий код 32;

  • ASCII-символHT, horizontaltab, символ горизонтальної табуляції, \u0009, десятковий код 9;

  • ASCII-символFF, formfeed, символ переведення сторінки (був запроваджений для роботи з принтером), \u000c, десятковий код 12;

  • завершення рядка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]