Компиляторы и интерпретаторы

Федеральное агентство по образованию и науке РФ



МОУ ВПО Институт права и экономики



Кафедра  математических, естественнонаучных и экономических дисциплин



реферат



на тему:



«Компиляторы и интерпретаторы»





                               Выполнила: студентка экономического факультета

                                                               группы Б-8-1 Новикова Ольга

                           Проверила:  доцент Седых Ирина Александровна

                                      











Липецк 2009
Содержание

Введение……………………………………………………..……………………3

1) Языки программирования для микроконтроллеров……..………………….5

2) Виды компиляторов………………………………………..………………….9

3) Компиляторы и интерпретаторы……………………………...……………..15

4) Командный интерпретатор…………………………………………...………18

Заключение……………………………………………………………….………25

Список использованной литературы………………………………...…………27




Введение

	Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования. Смысл появления такого языка – оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм.

	Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.

	Связь между языком, на котором мы думаем/программируем, и задачами и решениями, которые мы можем представлять в своем воображении, очень близка. По этой причине ограничивать свойства языка только целями исключения ошибок программиста в лучшем случае опасно. Как и в случае с естественными языками, есть огромная польза быть, по крайней мере, двуязычным. Язык предоставляет программисту набор концептуальных инструментов, если они не отвечают задаче, то их просто игнорируют. Например, серьезные ограничения концепции указателя заставляют программиста применять вектора и целую арифметику, чтобы реализовать структуры, указатели и т.п. Хорошее проектирование и отсутствие ошибок не может гарантироваться чисто за счет языковых средств.

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

	Персональные компьютеры IBM используют машинный язык микропроцессоров семейства 8086, т.к. их аппаратная часть основывается именно на данных микропроцессорах. 

	Можно писать программы непосредственно на машинном языке, хотя это и сложно. На заре компьютеризации(в начале 1950-х г.г.), машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки), которые стали своеобразным связующим мостом между человеком и машинным языком компьютера. Языки высокого уровня работают через трансляционные программы, которые вводят "исходный код" (гибрид английских слов и математических выражений, который считывает машина), и в конечном итоге заставляет компьютер выполнять соответствующие команды, которые даются на машинном языке. Существует два основных вида трансляторов: интерпретаторы, которые сканируют и проверяют исходный код в один шаг, и компиляторы, которые сканируют исходный код для производства текста программы на машинном языке, которая затем выполняется отдельно. 


1) Языки программирования для микроконтроллеров

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

Сами языки программирования в свою очередь делятся на две группы:

языки программирования "высокого" уровня

языки программирования "низкого" уровня.

	К языкам программирования "низкого" уровня относятся языки программирования в которых каждому оператору соответствует не более одной машинной команды. Набор машинных команд каждого конкретного процессора обязательно входит в состав такого языка программирования. Языки программирования низкого уровня в настоящее время называются ассемблерами (старое название автокоды). Для каждого процессора существует своя группа ассемблеров. Ассемблеры для одного и того же процессора различаются между собой дополнительными возможностями, облегчающими программирование.Языки программирования "высокого" уровня позволяют заменять один оператор несколькими машинными командами. Это позволяет увеличивать производительность труда программистов. Кроме того, языки "высокого" уровня позволяют писать программы, которые могут выполняться на различных микропроцессорах. (Естественно, что при этом необходимо использовать программы - трансляторы для соответствующего процессора.) В настоящее время наиболее распространены такие языки программирования высокого уровня как С и PLMО преимуществах и недостатках языков высокого и низкого уровней говорилось достаточно много. Выбор языка программирования зависит от состава аппаратуры, для которой пишется программа, а также от требующегося быстродействия всего программно - аппаратного комплекса в целом.В тех случаях, когда объём ОЗУ и ПЗУ мал (в районе нескольких килобайт) альтернативы ассемблеру нет. Именно эти языки программирования позволяют получать самый короткий и самый быстродействующий код программы (при прочих равных условиях, т.к. испортить можно всё!).Языки программирования высокого уровня позволяют значительно сократить время создания программы, но при этом увеличивается размер программы, поэтому для выбора такого языка программирования для микропроцессорных систем необходимо иметь достаточно большой объём памяти программ (несколько десятков килобайт). Увеличение объёма программы связано с несколькими факторами:

Язык программирования рассчитывается на все случаи жизни, поэтому в большинстве случаев человек мог бы написать программу короче (исключив не нужные в данном конкретном случае проверки или защиты).

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

Программист не использует подпрограммы там, где они могли бы сократить объём программы, так как на языке программирования высокого уровня это всего один или несколько операторов.

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

Виды программ – трансляторов

	Процесс преобразования операторов исходного языка программирования в машинные коды микропроцессора называется трансляцией исходного текста. В настоящее время ручная трансляция программ практически не используется. Трансляция производится специальными программами-трансляторами. Их классификация приведена на рисунке 1.



Рисунок 1. Классификация программ-трансляторов языков программирования.

	Существует два больших класса программ-трансляторов: компиляторы и интерпретаторы. При использовании компиляторов весь исходный текст программы преобразуется в машинные коды, и именно эти коды записываются в память микропроцессора. При использовании интерпретатора в память микропроцессора записывается исходный текст программы, а трансляция производится при считывании из памяти программ очередного оператора. Естественно, что быстродействие интерпретаторов намного ниже по сравнению с компиляторами, т.к. при использовании оператора в цикле он транслируется многократно.Применение интерпретатора может обеспечить выигрыш только в случае его разработки для языка программирования “высокого” уровня. В этом случае может быть сэкономлена внутренняя память программ, а также облегчен процесс отладки программ (при применении языка программирования BASIC) или облегчен перенос программ с одного типа процессора на другой (при применении языка программирования JAVA).При программировании на языке программирования ASSEMBLER применение интерпретатора приводит к проигрышу по всем параметрам, поэтому для языков программирования низкого уровня применяются только программы–компиляторы.Для программирования микроконтроллеров как на языке программирования “низкого” уровня, так и на языке программирования “высокого” уровня используются только компиляторы, поэтому рассмотрим подробнее виды этих трансляторов.




2) Виды компиляторов

	Программы-компиляторы бывают оценочные и профессиональные.

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

	Профессиональные трансляторы позволяют производить трансляцию исходного текста программы по частям. Это позволяет значительно сократить время трансляции исходного текста программы, так как не нужно транслировать весь текст программы, а можно транслировать только ту часть программы, которая менялась после предыдущей трансляции.

	Кроме того, каждый программный модуль может писать отдельный программист. Это позволяет сократить время написания программы. Даже в том случае, если программу пишет один человек, время написания программы сокращается за счёт использования готовых отлаженных и оттранслированных программных модулей. В таких компиляторах процесс трансляции программы разбивается на два этапа: трансляция программного модуля и связывание программных модулей в единую программу. Поэтому такие компиляторы называются компиляторами с раздельной трансляцией.

	Оценочные компиляторы обычно предлагаются бесплатно фирмами - производителями микроконтроллеров. Только фирма Intel предложила в своё время профессиональный пакет разработки программ - язык программирования PLM-51 в состав которого входит профессиональный язык программирования ASM-51.

	Профессиональные компиляторы разрабатываются и продаются отдельными фирмами. Для микроконтроллеров семейства MCS-51 получили известность продукты таких фирм как FRANCLIN, IAR, KEIL.

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



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

Чтобы писать сложные, эффективные и быстрые компиляторы, есть  много рецептов.  Но  здесь  речь  пойдет  не  о  них. Как написать компилятор просто  -  вот  в  чем  вопрос!  Ведь  такой  компилятор  и  короче,  и отлаживается  легче.  Здесь  не   будет  каких-то  хитрых   алгоритмов, позволяющих  достигать  чудес  эффективности  или  каких-  то особенных способов  организации  данных.  Увы,  с  этими способами одна проблема: заставить  их  работать  может  только  чудо.  А в этой статье - только практические рекомендации, а работают они надежно! 

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

Сканер

Среди   всех   конструкций,   воспринимаемых   компилятором,    есть минимальные, и которые уже не исеет смысла делить на части.   Например: идентификатор,  число,   строка,  ключевое   слово.    Они   называются лексемами. Компилятору нет нужды разбираться в их структуре.   Кстати, в описании старого,  доброго Алгола-60 использовался  термин иероглифы, то есть нечто такое,  что можно  обозначить значком.   Но у компьютера всего-то 256 символов - и приходится писать, например, "procedure".   А посему  идея  следующая:   отдельная  процедура  считывает программу из файла,  выделяет   оттуда  лексемы   и  передает   их  основной   части компилятора. А той  до текста программы  уже нет никакого  дела.  Такаяподпрограмма называется сканером.



В  языке  SIMPLE  существуют  пять  видов  лексем  (pис.2): ключевые слова,  идентификаторы,  числа,  спецсимволы   и  нечто  в   квадратных скобках.  По  поводу  первых  четырех  типов,  кажется,  все ясно - см. рисунок.  А  пятый,  последний  -  это  наша  хитрость. Дело в том, что компиляция  выражений  -  это  вопрос  особый,  и  ему  будет посвящена следующая статья.   Поэтому, пользуясь  тем, что  выходной язык  у  нас Паскаль, мы перекладываем эту задачу на плечи компилятора с Паскаля.  А чтобы  у  нас  не  возникало  проблем  -  информацию, которые мы просто переписываеми  в  выходной  файл,   не  разбираясь  в  его   внутренней структуре, заключаем в квадратные скобки. 

	Посмотрим на текст программы (Пример 1. Сканер). Основная  процедура сканера -  Scan. Вызывая  ее, мы  получаем очередную  лексему. Мы можем даже считать  ее аналогом  процедуры ввода  - со  странного устройства, которое передает   внутрь  компьютера   лексемы.  Процедура   Scan  по первом символу  лексемы определяет,  что за  лексема нас  сейчас ждет, и  вызывает   "специализированную"  процедуру,   которая  только   этим типом  лексем  и  занимается.  Единственная  загвоздка здесь - ключевые слова  путаются  с  именами.  Поэтому  они  считываются  вместе,  а  уж потом одно отделяются от другого. 

Обратим  внимание  на  вспомогательные  процедуры  GetCh  и UngetCh. Процедура GetCh заменяет сиволы перевода строки и табуляции на  пробелы и пропускает  лишние пробелы  (так получается,  что несколько  пробелов подряд эквивалентны  одному). Процедура  UngetCh используется,  если мы погорячились"  и  считали  "лишний"  символ.   Тогда  с  помощью  этой процедуры можно  сказать: "Возьми  обратно!" Процедура  GetCh выдаст  в следующий раз тот же символ.

Таблица имен

Когда  человек  пишет  свою  программу  или разбирается в чужой, ему нужно держать в голове кое-какую информацию. Но машина железная, у  нее головы нет.  Поэтому необходима  структура данных,  которая про  каждуюпеременную   хранила   бы   определенную   информацию.   Эта  структура называется таблицей имен. Без нее не обходится ни один компилятор.   Таблица  имен  действительно  похожа  на  таблицу.  Она  состоит  из "строк"  - ячеек  таблицы  имен,  которые могут содержать инфорацию об одной  простой  переменной,  например,  переменной целого типа. (Обычно эти ячейки  называют  записями  таблицы  имен,  но  здесь  сознательно используется другой термин, чтобы не было путаницы с языком SIMPLE).    Посмотрим на  рис.3. Там  изображена структура  нашей таблицей имен. Проще всего,  когда переменная  - целого  типа. Для  нее нужно  хранить всего ничего - имя и  тип (integer). В реальных, больших  компиляторах, впрочем, есть  еще кое-что  - ее  адрес, например.  Но мы,  слава Богу, компилируем в Паскаль! 

С записями  будет посложнее.  Даже в  голове у  нас они  хранятся не целиком,  а  как  нечто,  сложенное  из кусочков. А к чему должно быть ближе то, что хранится в  таблице имен? Наверное, к тому, что хранится в голове,  а не на бумаге. 

Но в одну ячейку таблицы имен может поместиться информация  максимум об  одной  переменной. Поэтому сейчас наша  задача  - "раскидать" по 
ячейкам информацию о структуре записи.  Это  можно  сделать разными способами. Здесь выбран следующий. На  любую переменную - i,j,u и  т.д. - заводим одну запись таблицы имен.   Если эта переменная - запись,  то в поле Fields пишется ссылка  на описание структуры ее полей. 

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

Описание  структуры  записи  представляет  собой  заголовок и еще несколько - по одной на  каждое поле - ячеек. Каждая из  этих ячеек (в  том  числе  и  заголовок)  содержит  в  поле  Ref  номер ячейки для следующего поля записи. Ячейка для последнего поля содержит в  поле Ref ноль.  Это означает  "Дальше полей  нет!".   Если  же   поле  записи   снова  запись,    то соответствующая  этому  полю  ячейка  содержит  в поле Fields ссылку на описание структуры полей. 

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






3) Компиляторы и интерпретаторы

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

	Интерпретатор берёт очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет (обычно после анализа оператор транслируется в некоторое промежуточное представление или даже машинный код для более эффективного дальнейшего исполнения). Только после того как текущий оператор успешно выполнен, интерпретатор перейдёт к следующему. При этом если один и тот же оператор будет выполняться в программе многократно, интерпретатор будет выполнять его так как, как будто встретил впервые. Вследствие этого программы,в которых требуется осуществить большой объём вычислений, будут выполняться медленно. Кроме того, для выполнения программы на другом компьютере там тоже должен стоять интерпретатор – ведь без него текст является просто набором символов. 

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

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

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

 

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

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

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




 4) Командный интерпретатор

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

	Задачи администрирования системы обычно решаются в текстовом режиме. Основным посредником между пользователем и системой в текстовом режиме является командный интерпретатор. Вкратце его роль можно охарактеризовать так: интерпретатор должен постоянно ожидать ввода команд пользователя и при их получении выполнять соответствующие действия, как правило, выражающиеся в вызове других программ. 

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

	ОС Linux использует несколько различных видов интерпретаторов. Наиболее распространенными среди них являются: 

sh. Bourne Shell. Прообраз командных интерпретаторов сегодняшнего дня. В современных Linux-системах sh представляет собой символическую ссылку на файл bash; 

bash. Bourne-Again SHell. Основной командный интерпретатор ОС Linux. Представляет собой развитие ash и sh. Поддерживает богатый язык написания скриптов, удобный интерфейс для редактирования командной строки, автопродолжение команд и множество других полезных возможностей; 

tcsh. C Shell. Расширенная версия интерпретатора C Shell, использующегося в BSD-системах. Поддерживает функцию автозавершения текста и расширенные возможности редактирования; 

zsh. Очень развитый командный интерпретатор, объединяющий в себе возможности csh, bash с дополнительными, такими как: улучшенная поддержка автопродолжения, более развитые возможности редактирования, расширенные файловые шаблоны и ряд других; 

nash. Not A SHell. Предельно облегченная оболочка, предназначенная для интерпретации сценариев в linuxrc файлах, при загрузке с виртуального диска initrd. Не позволяет работать пользователю в интерактивном режиме. 

	Отличительной особенностью программ интерпретаторов, являются две буквы sh, в конце их имени (от англ. shell — оболочка, командный интерпретатор). Как работает командный интерпретатор? 

	Интерпретатор большую часть времени проводит, ожидая команды пользователя. При этом он выводит на экран приглашение, напоминающее это: 

   [user@host dir]

	По умолчанию приглашение содержит информацию об имени пользователя, имени компьютера и текущем каталоге. Завершающим символом является $ или # в зависимости от того, обладает ли пользователь, от имени которого запущен интерпретатор, привилегиями суперпользователя (#) или нет ($). 

	Формат приглашения можно настроить при помощи переменной командного интерпретатора PS1

	После того как пользователь ввёл команду, командный интерпретатор анализирует ее и выполняет соответствующие действия. Если команда является именем внешней программы, управление передается ей. Если это наименование внутренней команды интерпретатора, он сам знает что делать — выполняются действия соответствующие введенной команде. После того как команда выполнена, управление возвращается назад интерпретатору. 

	Команда может выполняться в фоновом режиме. Для этого после ее названия нужно поставить символ & амперсанд. В этом случае, управление сразу же возвращается интерпретатору, команда при этом продолжает выполняется. При ее завершении на экран будет выдано информационное сообщение об этом

	Самые значительные усилия интерпретатор прилагает для того, чтобы проанализировать команду и выполнить те действия, которые требует от него пользователь. Разные программы предлагают разные возможности, но большинство из них обеспечивают следующий необходимый минимум: 

Файловые шаблоны. Специальные метасимволы, необходимые для описания групп файлов; 

Перенаправление. Механизм, обеспечивающий взаимодействие несвязанных между собой программ: данные, поступающие с выхода одной программы попадают на вход другой. 

Переменные интерпретатора. Командный интерпретатор использует переменные как временное хранилище данных, необходимое ему для нормальной работы: например, переменные могут использоваться в скриптах интерпретатора или для передачи настроек. Переменные также обеспечивают удобный доступ к среде окружения программ. 

Скриптинг. Команды могут не вводится пользователем в интерактивном режиме, а считываться из заранее подготовленного файла. Это облегчает многократное исполнение одинаковых или схожих между собой действий. Интерпретаторы развивают эту идею, позволяя обрабатывать не просто последовательность подряд идущих команд, а целые сценарии, содержащие конструкции алгоритмических языков программирования: циклы, ветвления, функции. 

Ввод командной строки

	Командный интерпретатор bash делает редактирование командной строки предельно эффективным. Ввод строки осуществляется быстро и точно. Для выполнения этих требований bash обладает несколькими особенностями: 

Мощный и гибко настраиваемый интерфейс редактирования командной строки; 

История команд; 

Автопродолжение. 

Редактирование

	Командный интерпретатор bash предоставляет очень богатый интерфейс для ввода и редактирования командной строки. Интерфейс в значительной мере повторяет интерфейсы таких текстовых редакторов как vi и emacs. Поддерживаются команды быстрого перемещения, удаления, вставки, управления историей, автозавершения, макрокоманды и многие другие. 

Перечисленные привязки к клавишам не являются жесткими. Интерфейс может быть гибко настроен с помощью библиотеки GNU readline. Интерпретатор bash поддерживает более сотни встроенных команд, облегчающих редактирование

История команд

	Все команды, введенные пользователем в интерпретаторе bash, сохраняются. Перечень ранее введенных команд называется историей. После того как нажимается клавиша Enter, команда записывается в историю. Если при этом размер списка истории слишком велик (максимальный размер определяется переменной HISTSIZE), первая команда из него удаляется. При завершении работы bash история сохраняется в файле, а в начале его работы — восстанавливается. 

	Если команда раньше была введена, ее можно не вводить полностью, а просто выбрать из списка истории. Наиболее простые команды для передвижения по списку истории: клавиши вверх и вниз для перехода соответственно к предыдущему и следующему элементу истории. [Предостережение] Предостережение 

Первая команда это первая команда в списке истории, т.е. первая введенная команда. Последняя — последняя команда в списке, последняя введенная команда. 

Комбинации клавиш для управления историей.

вверх 

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

вниз 

Извлечь следующую команду из списка истории и передвинуться на одну команду вперед 

Page Up 

Перейти к началу списка истории и извлечь первую введенную команду 

Page Down 

Перейти к концу списка истории, т.е. к строке, которая сейчас редактируется 

Ctrl-r 

Обратный поиск в истории. Просматриваются все строки, начиная с последней, и сравниваются с искомым текстом 

Ctrl-s 

Прямой поиск в истории. Просматриваются все строки, начиная с первой, и сравниваются с искомым текстом 

Meta-Ctrl-y 

Вставить первый аргумент последней введенной команды (второе слово в строке) 

Meta-. 

Вставить последний аргумент последней введенной команды (последней слово в строке) 

Ctrl-o 

Принять на выполнение введенную строку и перейти к следующей команде в списке истории (при нажатии Enter осуществляется переход в конец списка) 

Автопродолжение

	Автопродолжение (автодополнение, автозавершение — англ. autocompletion) является чрезвычайно удобной способностью bash. После того как набраны первые символы имени, нажатие клавиши Tab заставляет bash показать возможные варианты окончания набранного слова. Если вариант только один, bash использует его и автоматически завершает слово. Если вариантов несколько, bash выводит их все на экран. Если вариантов слишком много, bash предварительно спросит, стоит ли выводить их все? Наконец, если варианты завершения слова отсутствуют, bash издаст звуковой сигнал. Это хороший повод подумать о том, что при наборе слова, вероятно, уже допущена ошибка. 

	По умолчанию bash автопродолжает названия команд, имена файлов, а при использовании в начале имени специальных символов еще и имена пользователей (~), название хостов (@) и имена переменных ($). 

	Для автопродолжения имени команды bash просматривает названия встроенных команд и предопределенных алиасов, если совпадений не найдено — имена всех файлов в каталогах с исполняемыми файлами. Кандидатами на завершение считаются имена всех исполняемых файлов, которые начинаются также как и вводимое имя. 

	




Заключение



	Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно Вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ.  Поверьте мне это не сарказм вы только посмотрите  как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где нибудь в Запорожье, Амстердаме, Токио или Иерусалиме, перед стареньким 133MHz горбится молодой, никем не признанный специалист и разрабатывает новейшую систему  искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с машиной на ТЫ.

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

Завершить свой труд хорошо бы на такой оптимистичной ноте, но нет, напоследок хочется процитировать человека, фрагменты работы которого, в виде информации о языке Си, вам уже попадались на страницах этого текста: 



Единственный способ изучать новый язык программирования – писать на нём программы.



		                                Брайэн Керниган




Список литературы



В.Ю. Демьяненко. Программные средства создания и ведения баз данных. –М.: Финансы и статистика, 1984.

В.А. Мясников, С.А. Майоров, Г.И. Новиков. ЭВМ для всех. –М.: Знание, 1985.

А.Г. Гейн. Основы информатики и вычислительной техники. –М.: Просвещение, 1997.

В.Ф. Ляхович. Основы информатики. –Ростов-на-Дону: Феникс, 1996.

Вычислительная техника и программирование / Под ред. А.В. Петрова –М.: Высш. шк., 1990.

Информатика: Базовый курс / С.В. Симонович и др. – СПб.: Питер, 1999.




Тесты:



1) Прогресс компьютерных технологий определил процесс появления:



а) вычислительных формул

б) знаковых систем

в) новых алгоритмов

г) языки программирования



2) Существуют два основных вида трансляторов: интерпритаторы и .. ?



а) микропроцессоры

б) детранслятор

в) декомпилятор

г) компиляторы



3) Как называются языки программирования «низкого уровня»?



а) С + +

б) С

в) ассемблерами

г) PLMO



4) Во что преобразуется исходный текст программы при использовании компиляторов?



а) в машинные коды

б) в исходный текст интерпретаторов

в) в исходный код

г) остается прежним



5) Назовите виды компиляторов?



а) оценочные и профессиональные

б) оценочные и готовые

в) только профессиональный

г) только оценочный



6) В языке SIMPLE существуют несколько обязательных видов лексем, назовите их?



а)  ключевые слова, числа, символы.

б) ключевые слова, идентификаторы, числа, спецсимволы и нечто в квадратных скобках

в) идентификаторы и спецсимволы и числа

г) числа, ключевые слова, нечто в скобках.



7) С помощью интерпретатора допустимо в любой момент…?



а) закрыть программу

б) возобновить программу

в) удалить программу

г) остановить программу



8) Задачи администрирования системы обычно решаются в … режиме?



а) текстовом 

б) числовом

в) кодовом

г) фоновом



9) Формат приглашения можно настроить при помощи переменной командного… ?



а) компилятора

б) интерпретатора

в) транслятора

г) режима



10) Для чего служит команда CTRL-o ?



а) для вставки последнего аргумента

б) для прямого поиска в истории

в) для вставки первого аргумента

г) для принятия на выполнение введенную строку


Ответа на тесты:

 1 - а

 2 - г

 3 - в

 4 - а

 5 - а

 6 - б

 7 - г

 8 - а

 9 - б

10 - г





29