Конечные автоматы и регулярные языки

Теория

В этой главе мы начинаем изложение элементов теории формальных языков.

Говоря "формальный язык", мы имеем в виду то, что приведенные здесь результаты используются прежде всего при описании искусственных языков, придуманных людьми для специальных целей, например языков программирования. Но непреодолимой преграды между специально придуманными искусственными (формальными) языками и стихийно возникающими и развивающимися естественными языками не существует. Оказывается, что естественные языки характеризуются сложными грамматическими правилами, т.е. довольно жестко формализованы, а даже самый "научно разработанный" язык программирования содержит "темные места", однозначное понимание которых является проблемой.

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

Первый из них - синтаксис языка. Язык - это какое- то множество "слов", где "слово" есть определенная конечная последовательность "букв" - символов какого-то заранее фиксированного алфавита. Термины "буква" и "слово" могут пониматься по-разному (математическое определение этих терминов будет дано ниже). Так, "буквами" могут быть действительно буквы алфавита какого-нибудь естественного или формального языка, например русского языка или языка программирования "Паскаль". Тогда "словами" будут конечные последовательности "букв": крокодил", "integer". Такие слова называют "лексемами". Но "буквой" может быть "слово" ("лексема") в целом. Тогда "слова" - это предложения естественного языка или программы языка программирования. Если фиксировано какое-то множество "букв", то не каждая их последовательность будет "словом", т.е. Элексемой" данного языка, а только такая последовательность, которая подчиняется определенным правилам. Слово "крыкадил" не является лексемой русского языка, а слово "iff" не является лексемой в "Паскале". Предложение "Я люблю ты" не является правильным предложением русского языка, точно так же, как и запись "х:= =t" не есть правильно написанный оператор присваивания "Паскаля". Синтаксис* языка и представляет собой систему правил, в соответствии с которыми можно строить "правильные" последовательности "букв". Каждое слово языка характеризуется определенной структурой, специфичной именно для данного языка. Тог да необходимо, с одной стороны, разработать механизмы перечисления, или порождения, слов с заданной структурой, а с другой - механизмы проверки того, что данное слово принадлежит данному языку. Прежде всего именно :эти механизмы и изучает классическая теория формальных языков.

Второй аспект - семантика языка. Семантика** предполагает сопоставление словам языка некоего "смысла", Эзначения". Например, записывая математическую формулу, мы должны соблюдать определенные синтаксические правила (расстановка скобок, правописание символов, порядок символов и т.п.), но, кроме этого, формула имеет вполне определенный смысл, что-то обозначает.

Язык - это средство общения, передачи информации. Если мы хотим, чтобы нас поняли, мы должны не только синтаксически правильно, соблюдая должный порядок букв в слове и слов в предложении, строить свою речь, но и заботиться об ее смысле, о тех идеях, которые мы выражаем в речи. Математические теории "смысла" появились сравнительно недавно, и в дополнении к следующей главе мы очень коротко рассмотрим некоторые подходы к математическому описанию семантики языков программирования.

* Слово "синтаксис" происходит от древнегреческих "syn" - "вместе" и "taxis" - "порядок, строй". Таким образом, синтаксис можно понимать как "составление".

** От древнегреческих слов "sema" - "знак, знамение" и "semanticos" - "обозначающий".

Наконец, третий аспект - прагматика языка. Прагматика связана с теми целями, которые ставит перед собой носитель языка: например, человек произносит речь, имея перед собой цели, связанные не с синтаксисом, не с семантикой языка, на котором он говорит или пишет, а, скажем, с получением за речь определенной суммы денег. Прагматика является уже скорее дисциплиной социально-философской, затрагивающей целепол агающую деятельность личности. Мы ни в малейшей степени не будем ее касаться.

В этой главе вначале будут рассмотрены основные понятия математической теории формальных языков, важнейшим среди которых является понятие порождающей грамматики, а за тем - так называемые регулярные языки. Теория регулярных языков вместе с теорией конечных автоматов образует фундамент всей теории формальных языков.

  • Алфавит, слово, язык

    Рассмотрим самое простое понятие теории языков - понятие алфавита.Подробнее
  • Порождающие грамматики

    Как уже отмечалось, классическая теория формальных языков изучает прежде всего синтаксис языка. Она вводит математическую модель синтаксиса, которая описывает механизмы порождения и распознавания "правильно построенных" цепочек. В этом разделе мы рассмотрим первый из этих механизмов.Подробнее