Формальный язык: различия между версиями

Перейти к навигации Перейти к поиску
нет описания правки
(Создана новая страница размером '''Формальный язык''' (''Formal language'') - произвольное множество <math>L</math>...)
 
Нет описания правки
 
(не показано 6 промежуточных версий 2 участников)
Строка 1: Строка 1:
'''Формальный язык''' ([[Formal language|''Formal language'']]) - произвольное множество <math>L</math> цепочек в некотором заданном алфавите <math>\Sigma</math>, т.е. <math>L \subseteq \Sigma^*</math>.
'''Формальный язык''' (''[[Formal language]]'') произвольное множество <math>\,L</math> цепочек в некотором заданном алфавите <math>\,\Sigma,</math> т.е. <math>L \subseteq \Sigma^*</math>.


Так как язык --- это множество, то операции объединения,пересечения, нахождения разности и дополнения применимы и к языкам. Кроме того, различные операции, определенные для цепочек, применяются и к языкам (например, <math>L^R = \{\alpha^R : \alpha \in L\}</math>).
Так как язык это множество, то операции объединения,пересечения, нахождения разности и дополнения применимы и к языкам. Кроме того, различные операции, определенные для цепочек, применяются и к языкам (например, <math>L^R = \{\alpha^R : \alpha \in L\}</math>).
Среди основных из них --- операции конкатенации и итерации.
Среди основных из них операции конкатенации и итерации.


Язык <math>L_1 L_2</math>, называемый [[конкатенация языков|''конкатенацией'']] (а также [[сцепление языков|''сцеплением'']] или [[произведение языков|''произведением'']]) языков <math>L_1</math> и <math>L_2</math>, --- это язык <math>\{\alpha\beta: \alpha \in L_1 \mbox{ и } \beta \in
Язык <math>\,L_1 L_2,</math> называемый [[конкатенация языков|''конкатенацией'']] (а также [[сцепление языков|''сцеплением'']] или [[произведение языков|''произведением'']]) языков <math>\,L_1</math> и <math>\,L_2</math>, это язык  
L_2\}.</math>


''Итерация'' языка <math>L</math>, обозначаемая через <math>L^*</math>,
:::::<math>\{\alpha\beta: \alpha \in L_1 </math> и <math> \beta \in L_2\}.</math>
 
''[[Итерация языка]]'' <math>\,L,</math> обозначаемая через <math>\,L^*,</math>
определяется по следующим правилам:
определяется по следующим правилам:


\smallskip(1) <math> L^o = \{e\}</math>
(1) <math>\, L^o = \{e\};</math>


\smallskip(2) <math> L^n = LL^{n-1} \mbox{ для } n \geq 1</math> ;
(2) <math> \,L^n = LL^{n-1} </math> для <math> n \geq 1;</math>  


\smallskip(3) <math> L^* = \bigcup\limits_{n\geq O} L^n </math> .
(3) <math> L^* = \bigcup\limits_{n\geq O} L^n. </math>  


''Позитивная итерация'' языка <math>L</math>, обозначаемая через
''[[Позитивная итерация языка]]'' <math>\,L</math>, обозначаемая через <math>\,L^+</math>, это язык <math>\bigcup\limits_{n\geq 1} L^n</math>. Заметим, что <math>\,L^+=LL^*=L^*L</math> и <math>\,L^*=L^+\cup\{e\}.</math>
<math>L^+</math> , --- это язык <math>\bigcup\limits_{n\geq 1} L^n</math>. Заметим, что
<math>L^+=LL^*=L^*L</math> и <math>L^*=L^+\cup\{e\}.</math>


Если язык <math>L</math> состоит из небольшого числа
Если язык <math>\,L</math> состоит из небольшого числа цепочек, то самый очевидный способ описания языка составить список всех цепочек из <math>\,L.</math> Однако многие языки (например, языки программирования) невозможно или нежелательно задавать исчерпывающим перечислением входящих в них цепочек, и поэтому, как правило, используются другие способы определения языка. Причем используются только такие способы, которые позволяют описанию языка быть обозримым (заведомо конечным), хотя описываемый язык может быть и бесконечным. Известно несколько методов определения языка, удовлетворяющих этому требованию.
цепочек, то самый очевидный способ описания языка ---
составить список всех цепочек из <math>L</math>.
Однако многие языки (например, языки программирования)
невозможно или нежелательно задавать исчерпывающим
перечислением входящих в них цепочек, и поэтому, как
правило, используются другие способы определения языка.
Причем используются только такие способы, которые позволяют
описанию языка быть обозримым (заведомо конечным), хотя
описываемый язык может быть и бесконечным. Известно
несколько методов определения языка, удовлетворяющих этому
требованию.


Один из них связан со способом задания множества с помощью
Один из них связан со способом задания множества с помощью характеристического свойства (предиката) и состоит в использовании частичного [[алгоритм|''алгоритма'']] (предписания производить некоторые действия), который для произвольной входной цепочки остановится и ответит "да" после конечного числа шагов, если эта цепочка принадлежит языку. Схематизированные устройства, используемые для представления таких алгоритмов, получили название [[распознаватель|''распознавателей'']]. Примерами распознавателей являются [[конечный автомат|''конечные автоматы'']], [[автомат с магазинной памятью|''автоматы с магазинной памятью'']] и [[машина Тьюринга|''машины Тьюринга'']].
характеристического свойства (предиката) и состоит в
использовании частичного ''алгоритма'' (предписания производить
некоторые действия), который для произвольной входной
цепочки остановится и ответит "да" после конечного числа
шагов, если эта цепочка принадлежит языку.
Схематизированные устройства, используемые для представления
таких алгоритмов, получили название ''распознавателей''.
Примерами распознавателей являются
''конечные автоматы'', ''автоматы с магазинной памятью'' и
''машины Тьюринга''.


Второй метод описания языка имеет вид исчисления, называемого [[грамматика|''грамматикой'']], --- некоторой порождающей системы (разрешения производить некоторые действия), используя которую можно получить (породить) все [[цепочка|цепочки]] языка <math>L</math> и только их. Одно из преимуществ определения языка с помощью грамматики состоит в том, что грамматика придает цепочкам ("предложениям") языка полезную структуру, которая может использоваться, например, для придания смысла предложениям языка.
Второй метод описания языка имеет вид исчисления, называемого [[грамматика|''грамматикой'']], некоторой порождающей системы (разрешения производить некоторые действия), используя которую можно получить (породить) все [[цепочка|цепочки]] языка <math>\,L</math> и только их. Одно из преимуществ определения языка с помощью грамматики состоит в том, что грамматика придает цепочкам ("предложениям") языка полезную структуру, которая может использоваться, например, для придания смысла предложениям языка.


Язык <math>L</math> называется ''автоматным, праволинейным, регулярным, контекстно-свободным, контекстно-зависимым'' и т.д., если существует ''грамматика'' <math>G</math> соответствующего типа, которая порождает этот язык, т.е. для которой <math>L(G)=L</math>.
Язык <math>\,L</math> называется [[Автоматный язык|''автоматным'']], [[Праволинейный язык|''праволинейным'']], [[Регулярный язык|''регулярным'']], [[Контекстно-свободный язык|''контекстно-свободным'']], [[Контекстно-зависимый язык|''контекстно-зависимым'']] и т.д., если существует [[Грамматика|''грамматика'']] <math>\,G</math> соответствующего типа, которая порождает этот язык, т.е. для которой <math>\,L(G)=L</math>.


==Литература==
==Литература==
[Ахо-Ульман],
* Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. — М.: Мир, 1978. — Т. 1,2.
 
* Бауэр Ф.Л., Гооз Г. Информатика. — М: Мир, 1990. — Т. 1,2.
 
* Касьянов В.Н.  Лекции по теории формальных языков, автоматов и сложности вычислений. — Новосибирск: НГУ, 1995.
 
* Касьянов В.Н., Поттосин И.В. Методы построения трансляторов. — Новосибирск: Наука. Сиб. отд-ние, 1986.


[Бауэр-Гооз],


[Касьянов/95],


[Касьянов-Поттосин]
[[Категория: Теория формальных языков]].

Навигация