Book.od.ua Книги для вашего бизнеса



Одесская библиотека бизнес литературы
полезные книги для бизнеса

6.12. В исправительной колонии.Часть Двеннадцатая.

Грамматика - это набор правил, которым удовлетворяют правильно состав­ленные предложения. В процессе беседы взрослые люди, не задумываясь, строят верные в грамматическом отношении предложения, но компьютер должен сле­довать правилам. Бакус разработал математический формализм для описания и грамматического разбора, который способствовал задаче преобразования языка. Этот принцип хорошо работал для упрощенной машинной грамматики, которая немного проще грамматики, используемой в процессе общения между людьми. Формализм Бакуса, называемый BNF - аббревиатура Backus Normal Form (нор­мальная форма Бакуса), - обеспечил методологию создания грамматически вер­ных компьютерных языков и провел параллель с подобными достижениями Наума Хомски по производящей грамматике. Используя данные наработки, я научился разрабатывать маленькие грамматически верные языки программирования.
BNF помог определиться с грамматикой компьютерного языка. Это позволило создать компилятор, который бы занимался грамматическим разбором предложе­ний в языке и воспринимал лишь грамматически верные конструкции. Это была половина дела. Вторая половина заключалась в написании части компилятора, который преобразовывает каждое грамматически верное предложение в машин­ный код. Это была очень кропотливая, утомительная и трудная работа. Ошибка в преобразовании программы, которую люди могут использовать для осуществле­ния математических расчетов или для управления космическим кораблем, может оказаться фатальной.
Операционная система Unix была изумительно легкой средой для програм­мистов. Она включала в себя два наиболее замечательных инструмента, которые я когда-либо встречал: они назвались lex и yacc, и с их помощью я мог создавать компиляторы практически безо всяких усилий. Lex - это аббревиатура от "lexi­cal analyzer" ("лексический анализатор"). Слово Yacc расшифровывалось как "Yet Another Compiler-Compiler" ("еще один компилятор-компиляторов") и было еще одним забавным акронимом, характерным для инструментов Unix. Можно было использовать lex для создания подпрограмм, распознающих все слова в языке. При помощи yacc появлялась возможность создать подпрограмму, которая бы осуществляла грамматический разбор и распознавала грамматически верные пред­ложения и после этого занималась выполнением соответствующих действий. Lex и yacc были непроцедурными программами - не нужно было описывать все детали лексического анализа и грамматического разбора. Вместо этого вы просто говорили им, какую именно грамматику хотите распознать, и они писали специализирован­ную программу под заказ, используя алгоритмы для сравнения образцов, которые были предложены пионерами компьютерных технологий Аланом Тюрингом и Стефаном Клене. При помощи lex и yacc я научился создавать мои собственные компьютерные языки.
Подобно тому, как диаграммы Фейнмана позволяли физикам рассчитывать ве­роятностные значения квантовой механики, для первоначального осуществления которых понадобилась гениальность Швингера или Фейнмана, эти инструменты грамматического разбора позволяли обычным программистам создавать языки, что ранее требовало невероятных усилий.


Понравился материал? Поделитесь с друзьями!

<< Предыдущая статьяСледующая статья >>
6.11. В исправительной колонии.Часть Одиннадцатая. 6.13.В исправительной колонии.Часть Триннадцатая.





Убедительная просьба при использовании любых материалов Одесской электронной бизнес-библиотеки ставить активную ссылку на наш сайт. По всем вопросам касательно сайта пожалуйста пишите на почту
      Карта сайта