Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Layt_teor_osnovy_form_yazykov.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.17 Mб
Скачать

1.2. Символы и цепочки.

Мы неформально определяем язык как подмножество множества всех предложений из "слов" или символов некоторого основного словаря. И опять - таки нас не интересует смысл этих предложений. Например, английский язык состоит из предложений, которые являются последовательностями, составленными из слов (if, he, is и т.д.), и знаков пунктуации (запятые, точки, скобки). Язык программирования ПАСКАЛЬ состоит из программ, которые являются последовательностями, составленными из таких символов, как if, begin, end, знаков пунктуации, букв и цифр. Язык четных целых чисел состоит из последовательностей, составленных из цифр 0,1,...9, в которых последней цифрой должны быть 0,2,4,6 или 8.

О п р е д е л е н и е 1.1. АЛФАВИТ - это непустое конечное множество элементов. Назовем элементы алфавита символами. Всякая конечная последовательность символов алфавита А называется цепочкой. Вот несколько цепочек "в алфавите" А={a,b,c}:a,b,c,ab,aaca. Мы также допускаем существование пустой цепочки , т.е. цепочки, не содержащей ни одного символа. Важен порядок символов в цепочке; так, цепочка ab не то же самое, что ba, и abca отличается от aabc. Длина цепочки х (записывается как |х|) равна числу символов в цепочке. Таким образом,

||=0, |а|=1. |abb|=3.

Заглавные буквы M,N,S,T,U,... используются как переменные или имена символов алфавита, в то время как строчные буквы t,u,v,w... используются для обозначения цепочек символов. Таким образом, можно написать

х=STV,

и это означает, что х является цепочкой, состоящей из символов S,T и V именно в таком порядке. Если х и у-цепочки, то их конкатенацией ху является, полученная путем дописывания символов цепочки у вслед за символами цепочки х. Например, если х=XY, у=YZ, то ху=XYYZ и ух=YZXY. Поскольку  - цепочка, не содержащая символов, в соответствии с правилом катенации для любой цепочки х мы можем написать

х=х=х.

Если z=ху - цепочка, то х - голова, а у - хвост цепочки z. И, наконец, х- правильная голова, если у - не пустая цепочка. Таким образом, если х=abc, то ,a,ab и abc суть головы х, и к тому же все они, кроме abc, - правильные головы.

Множества цепочек в алфавите обычно обозначаются заглавными буквами А,В,... . Произведение АВ двух множеств в цепочке А и В определяется как

АВ={ху|хА, а уВ}

и читается как "множество цепочек ху, такое, что х из А, а у из В". Например, если А={a,b} и B={c,d}, то множество AB={ac,ad,bc,bd}. Поскольку х=х=х справедливо для любой цепочки х, мы имеем

{}A=A{}=A.

Заметьте, что здесь символ  заключен в фигурные скобки. Произведение определено для множеств, тогда как  является символом, а не множеством. {}-это множество, состоящее из пустого символа .

Мы можем теперь определить степени цепочек. Если x1=x, x2=xx, x3=xxx , и в общем случае xn определяется как х - цепочка, то х0 - пустая цепочка ,

Для n>0 имеем xn=xxn-1=(xn-1)x.

Так же можно определить степени алфавита А:

A0={}, A1=A, An=AAn-1 для n>0.

Используя это, определим две последние операции в этом разделе - итерацию А* множества А и усеченную итерацию А+ множества А:

А+1  А2  ...  Аn ...,

А*0  А+.

Таким образом, если А={a,b}, то А* включает цепочки

,a,b,aa,ab,bb,aaa,aab... .

Заметим, что А+=АА* =(А*)А.

П р и м е р 1.1.:

Пусть z=abb. Тогда |z|=3. Головы z есть ,a,ab,abb. Правильные головы z есть ,a,ab. Хвосты z - это ,b,bb,abb. Правильные хвосты z - это ,b,bb.

Пусть х=а, z=abb.Тогда

zx=abba, xz=aabb,

z0=, z1=abb, z2=abbabb, z3=abbabbabb,

|z0|=0, |z1|=3, |z2|=6,|z3|=9.

Пусть S={a,b,c}. Тогда

S+={a,b,c,aa,ab,bb,bc,ca,cb,cc,aaa,...}.

S*={,a,b,c,aa,ab,ac,...}.

Иногда удобнее и, как правило, нагляднее писать х... вместо ху,

если нас не интересует у - остальная часть цепочки. Таким образом, три точки "..." обозначают любую возможную цепочку, включая и пустую. Наиболее часто встречаются следующие обозначения:

Обозначение Смысл

z=х... х - голова цепочки z. Нам безразличен хвост.

z=...х х - хвост цепочки z. Нам безразлична голова.

z=...х... х встречается где-то в цепочке z.

z=S... Символ S - первый символ цепочки z.

z=...S Символ S - последний символ цепочки z.

z=...S... Символ S встречается где-то в цепочке z.

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