Определение языка программирования.

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

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

ЯП высокого уровня: Главная особенность – абстракция языка. Абстракции делают сложные задачи простыми. Сравнительно большие стандартные библиотеки означают, что то, что вы хотите сделать, скорее всего уже реализовано и доступно. ЯП низкого уровня: Больший контроль над памятью; вы можете сделать то, что практически невозможно в других языках. Позволит вам лучше понять, что происходит за кулисами в высокоуровневых языках и научит ценить абстракции. Чем больше программисту при создании программы нужно понимать и следить за работой программы, тем на ЯП более низкого уровня он программирует.

Нотации выражений. Смешанная нотация.

Это - средства описания данных и средства описания действий.

Операции, определяемые комбинацией символов, нельзя классифицировать в тер-

минах префиксной, инфиксной и постфиксной нотации. Например, в выражении

if a > b then a else b совместно используются ключевые (служебные) слова if, then, else.

Значащими компонентами этого выражения являются условие a > b и выра жения a и b.

Если значением условия является true, то значением выражения является a, в противном случае — b. Говорят, что операция имеет смешанную нотацию, если ее значащие компоненты перемежаются со служебными словами (или символами).

НЕ нашли? Не то? Что вы ищете?
Префиксная нотация выражения

Префиксная нотация выражения - префиксное выражение декодируется простым просмотром слева направо. Префиксная нотация константы или переменной — это сама константа или В такой нотации нет никакой неоднозначности и нет необходимости применять скобки для точного определения последовательности операций при вычислении выражения. переменная. Пример: Сумме x и y соответствует префиксная запись + x y.

Постфиксная нотация выражения

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

Инфиксная нотация выражения: приоритетность и ассоциативность.

Инфиксная нотация выражения - легко читается человеком. В инфиксной нотации операции проставляются между их операндами. В сумме a и b операция сложения записывается между a и b. Точнее, так группируются левоассоциативные операции (+, –, ∗, /).

Приоритетность определяет порядок применения операции в выражении.

Операция высокого приоритета выбирает свои операнды перед операцией низкого

приоритета.

Ассоциативность задает порядок группировки в выражении операций с одинаковым приоритетом.

Правоассоциативная операция — подвыражения, содержащие ее множественные

вхождения, группируются справа налево.


Абстрактные синтаксические деревья. Лексический синтаксис.

Для простоты в формальные описания синтаксиса обычно

не включают описания синтаксических единиц самого нижнего уровня (атомов).

Подобные атомы группируют в обобщенные единицы — лексемы. Лексемы считают

основным инструментом лаконичной записи синтаксических правил.

Работу с лексемами, их детализацию описывает лексический синтаксис языка.

Лексический синтаксис задает соответствие между реальной программой и синтак-

сическими лексемами.

Абстрактное синтаксическое дерево (АСД) — это узел с k (k ≥ 0) деревьями-

потомками. Если k = 0, то дерево состоит из одного узла, без деревьев-потомков.

Узел без потомка называется листом. Корень дерева — это узел без родителя, то

есть узел, который не является потомком другого узла.

Контекстно-свободные грамматики.

Повторим, что для точного и формального задания синтаксиса языка используют

грамматику. Контекстно-свободная грамматика точно определяет конкретный синтаксис и включает в себя:

1. Набор терминалов. Они являются атомарными символами языка.

2. Набор нетерминалов. Это ≪сборки≫, представляющие конструкции языка.

3. Набор правил подстановки, задающих компонентный состав конструкций. Каж-

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

≪может быть≫. В левой части находится нетерминал, в правой части — строка

из набора терминалов и нетерминалов.

4. Стартовый нетерминал. Он представляет главную конструкцию языка.

Форма Бэкуса-Наура.

Метаязык - язык для описания другого языка.

Терминалы и нетерминалы. Нетерминалы заключаются в угловые скобки < и >, пустая строка записывается в виде <empty>. Терминалы могут заключаться в кавычки.

Правила подстановки. Метасимвол ::= означает ≪может быть≫, метасимвол | означает ≪или≫. Метасимволы | отделяют друг от друга альтернативы правых

частей (правил подстановки). Каждая альтернатива, отделяемая символом |, соответствует самостоятельному правилу.

Деревья разбора.

Дерево разбора иллюстрирует процесс построения строки, имеет следующие

характеристики:

1. Каждый лист помечается терминалом или <empty>.

2. Каждый неконечный узел помечается нетерминалом.

3. Дерево разбора любого числа для этой грамматики начинается с корня к которому добавляются три потомка. Это соответствует применению первого правила подстановки.

4. Корень помечается стартовым нетерминалом.

Синтаксическая неоднозначность.

Грамматика языка программирования является синтаксически неоднозначной,

если некоторая строка в его языке имеет более одного дерева разбора. Языки про-

граммирования могут описываться неоднозначными грамматиками. Если неодно-

значности существуют, вводятся соглашения, приводящие к одному дереву разбора

для каждой строки.

Выводы.

Вывод состоит из последовательности строк, начинающихся со стартового не-

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

одного из его правил подстановки. Вывод заканчивается, когда получают строку,

целиком состоящую из терминалов.

Пример вывода для числа 21.89

<вещ_число> -> <цел_часть> . <дробн_часть>

-> <цел_часть> <цифра> .<дробн_часть>

-> <цифра> <цифра> . <дробн_часть>

-> 2 <цифра> . <дробн_часть>

-> 21 . <дробн_часть>

-> 21 . <цифра> <дробн_часть>

-> 21 . 8 <дробн_часть>

-> 21 . 8 <цифра>

-> 21 . 89

Наиболее популярен левосторонний вывод — в нем каждый раз замещается

самый левый нетерминал.

Списки в инфиксных выражениях

При написании правил подстановки для конструирования выражений очень важно

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

Для решения этих вопросов удобно использовать понятие списка. Выражение

a + b + c можно рассматривать как список элементов, отделяемых (или склеивае-

мых) символом +, элементы списка называются термами. Термы обычно атомарны,

но могут и иметь внутреннюю структуру.

<E> ::= <E> + <T><E> – <T><T>

<T> ::= <T> ∗ <F><T> / <F><F>

<F> ::= numbername(<E>)

Переход от абстрактного синтаксиса к конкретному синтаксису.

Конкретный синтаксис включает в себя

средства для развернутого описания всех синтаксических элементов, вбирая всю

информацию абстрактного и лексического уровней.

Естественно, что грамматика конкретного синтаксиса должна быть согласована

с абстрактным синтаксисом. Это означает: правила подстановки выбирают так, что-

бы деревья разбора были как можно ближе к абстрактным синтаксическим деревьям.

Обработка ассоциативности и приоритетности.

Все операции в языке С имеют разный приоритет приоритет.

Операция присваивания является правоассоциативной и имеет минимальным при-

оритет, все остальные операции —

левоассоциативные. Самый высокий приоритет имеют мультипликативные

операции(∗, / , %).

1. Для каждой строки таблицы операций (каждого уровня приоритета) выбирается

нетерминал.

2. Для факторов (или наименьших подвыражений) создается дополнительный

нетерминал.

3. Строки таблицы обрабатываются последовательно: начинают с первой, а за-

канчивают последней строкой. Для левоассоциативных операций строятся

леворекурсивные правила подстановки, для правоассоциативных операций —

праворекурсивные правила подстановки.

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

рост соответствующего списка.

Расширенная BNF.

EBNF — расширение BNF, ориентированное на облегчение описания списков

и необязательных элементов. EBNF не предоставляет дополнительных возможно-

стей, поэтому все, что определяется в EBNF, может быть также определено в BNF.

Для представления списков важны следующие характеристики: нулевая длина,

роль разделителя элементов. Разделитель отделяет элементы, если он появляется

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6