Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_Лексичний аналіз та регулярні _вирази.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
658.43 Кб
Скачать

2.2. Алфавит, рядки і мови

2.2.1 Алфавит та рядки над алфавитом

Алфавитом V називають кінцеву непусту множину символів. Приклади: {0,1}, {a,b,c,d}. В наведених прикладах символ коми використовується як роздільник між символами. Таким чином, термін алфавит, або клас символів, позначає будь-яку кінцеву множину символів. Типовим прикладом символів можуть служити букви або алфавитно-цифрові символи. Множина {0,1} являє собою бінарний алфавит.

Конкатенацією двох символів”a” і ”b” називають операцію, наслідком якої є послідовність символів ”ab”. Це визначення розповсюджується і для послідовностей символів. Якщо позначимо операцію конкатенації символом ”+”, а отримання результату символом “→”, то : ”a”+”b” → ”ab”; ”ab”+”b2” → ”abb2”. По-іншому, якщо х и y — рядки, то конкатенація рядків х и y, що записується як ху, є рядком, сформованим шляхом дописування y до х. Наприклад, якщо x = dog, а y = house, то ху= doghouse.

Рядок над алфавитом V визначається як символ із алфавиту V або послідовність символів, яка отримана в результаті конкатенації символів або послідовності символів із алфавиту V. Таким чином, рядок над деяким алфавитом — це кінцева послідовність символів, узятих з алфавиту. У теорії мов термін речення (sentence) і слово (word) часто використаються як синоніми терміна "рядок". Довжина рядка s, звичайно позначувана як |s|, дорівнює кількості символів у рядку. Наприклад, довжина рядка banana дорівнює шести. Порожній рядок, позначуваний як ε (також, як і нульовий символ), являє собою спеціальний рядок нульової довжини або як рядок, що складається тільки з нульового символа ε.

Приклад. Хай задано алфавит V={1,2,3}. Тоді послідовності символів ”2”, ”31” та ”12331” є рядками над алфавитом V, а послідовності символів ”a”, ”341” та ”1b301” не є рядками над алфавитом V.

Хоча з функціональної і програмістської точек зору між рядками и числами є суттєва різниця, але з точки зору математики у них є певні загальні властивості.

Нехай для дійсних змінних x та y задана операція додавання „+”. Які властивості притаманні операції „+”?

а) замикання х+у – теж дійсне число. Ту ж саму властивість має операція конкатенація над рядками: в результаті операції над рядками “а”+”b”→”аb” отримуємо також рядок;

б) асоціативність: (x+y)+z = x+(y+z)=x+y+z. Для операції конкатенації над рядками теж саме (“а”+”b”)+”c”= “а”+(”b”+”c”)=“а”+”b”+”c”=”аbc”;

в) існування нульового (порожнього) елементу, тобто існує елемент і, такий що х+і=х. Для чисел це 0. Для рядків – пустий рядок, який будемо позначати символом ε (існують ще й інші позначення нейтрального елемента, наприклад, “λ”, “Ω”).

Хай V2 = V+V – множина всіх рядків довжиною 2, отриманих над V;

V3 = V2 + V – множина всіх рядків довжиною 3, отриманих над V;

Vn= Vn-1 + V – множина всіх рядків довжиною n, отриманих над V;

тоді:

Транзитивне замикання алфавиту V визначається як V+ = V ᴜ V2 ᴜ V3 ᴜ…

ᴜ Vn-1 ᴜ Vn ᴜ…

а

Рефлексивне замикання алфавиту V визначається як V* = ε ᴜ V ᴜ V2 ᴜ… = ε ᴜ V+

Деякі загальновживані терміни, що пов'язані із частинами рядків, наведені на рис. 2.3.

Термін

Визначення

Префікс рядка s (prefix)

Рядок, отриманий видаленням нуля або декількох останніх символів рядка s; наприклад, ban є префіксом рядка banana

Суфікс рядка s (suffix)

Рядок, отриманий видаленням нуля або декількох перших символів рядка s; наприклад, nаnа є суфіксом рядка banana

Підрядок рядка s (substring)

Рядок, отриманий видаленням префікса й суфікса рядка s; наприклад, nan є підрядком рядка banana. Кожен префікс і кожен суфікс також є підрядками, але не кожен підрядок є префіксом або суфіксом. Для кожного рядка s рядки s і ε є суфіксами, префіксами й підрядками рядка s.

Правильні префікс, суфікс і підрядок рядка s

Будь-який непустий рядок х, що є відповідно префіксом, суфіксом і підрядком рядка s і не збігається з рядком s

Підпослідовність рядка s (subsequence)

Будь-який рядок, сформований видаленням нуля або декількох (не обов'язково послідовних) символів з рядка s. Так, bааа є підпослідовністю рядка banana

Рис. 2.3. Терміни, що описують частини рядків