
- •1.Системы программирования. Основные понятия и классификация.
- •2.Процесс компиляции. Основные понятия о процессе компиляции.(48)
- •3.Грамматики и классификация по Хомскому. Способы описания синтаксиса языков программирования.(стр43)
- •4.Лексический анализ. Основные понятия.(50)
- •5.Задачи синтаксического анализа. Основные понятия, канонические формы, используемые в синтаксическом анализе (Префиксная и постфиксная записи выражений.) (58)
- •6.Определение семантики языков на основе средств логического программирования. Определение базисных операторов на языке исчисления предикатов.
- •7.Теория взаимодействующих процессов. Основные принципы и определения.
- •8. Теория взаимодействующих процессов. Определения операций над следами.
- •9. Теория взаимодействующих процессов. Определение процесса.
- •10 Теория взаимодействующих процессов. Определение операций над процессами.
- •11. Параллельное программирование. Основные понятия на основе теории взаимодействующих процессов.
- •12. Основные принципы объектно-ориентированного программирования.
- •13. Порождения и их представления в виде синтаксических деревьев.
- •14. Способы представления процессов в теории взаимодействующих процессов (теоретико-множественное, процедурное, с помощью выражений над процессами).
- •15. Нисходящий синтаксический анализ.
- •16.Восходящий синтаксический анализ.
- •17.Этапы синтеза. Распределение памяти.
- •18. Принципы программирования на языке оссам.
3.Грамматики и классификация по Хомскому. Способы описания синтаксиса языков программирования.(стр43)
Грамматика- система правил, задающая множество правильных цепочек (слов или фраз) из символов языка. Грамматику, в которой используется конечное множество символов и правил, задающих множество возможных структурных элементов и их порядок в предложениях языка, называют формальной. Формальная грамматика определяется как четверка множеств: G={N,T,S,P},где N — множество нетерминальных символов, T— множество терминальных символов, S — начальный символ (аксиома грамматики), P — множество правил (продукций). Объединение множеств и называют словарем языка.
Согласно Хомскому, формальные грамматики делятся на четыре типа. Для отнесения грамматики к тому или иному типу необходимо соответствие всех её правил (продукций) некоторым схемам.
Грамматики типа 0, которые называют грамматиками общего вида, не имеют никаких ограничений на правила порождения. Эти грамматики порождают естественные языки.
Любое правило r = η → ψ может быть построено с использованием произвольных цепочек η , ψ (Vт U VА)*. Например, <T><W>→ <W><T> или x<A>b<C><D>→ x<H><D>
Грамматики типа 1, которые называют также контекстно-зависимыми грамматиками, не допускают использования любых правил. Правила вывода в таких грамматиках должны иметь вид: χ1<A>χ2 χ1 ω χ2,
где χ1, χ2 - цепочки, возможно пустые, из множества (Vт U VА)*, символ <А>€ VА и цепочка ω (VтUVА)*. Цепочки χ1 и χ2 остаются неизменными при применении правила, поэтому их называют контекстом (соответственно левым и правым), а грамматику - контекстно-зависимой.
Грамматики типа 1 значительно удобнее на практике, чем грамматики типа 0, поскольку в левой части правила заменяется всегда один нетерминальный символ, который можно связать с некоторым синтаксическим понятием, в то время как в грамматике типа 0 можно заменять сразу несколько символов, в том числе и терминальных.
Грамматики типа 2 называют контектно-свободными и бесконтекстными грамматиками (КС-грамматики или Б-грамматики). Правила вывода таких грамматик имеют вид:<A> → α, где <A>€ VА и α € (VтU VА)*.
Очевидно, что эти правила получаются из правил грамматики типа 1 при условии χ1 = χ2 = $. Поскольку контекстные условия отсутствуют, то правила КС-грамматик получаются проще, чем правила грамматик типа 1. Именно такие грамматики используются для описания языков программирования.
Грамматики типа 3 называют автоматными грамматиками (А - грамматиками). Правила вывода в таких грамматиках имеют вид:<A>→ a или <A> → a<B> или <A> → <B>a,где a€ Vт, <A>, <B>€ VА, причем грамматика может иметь только правила вида <A>→ a<B> - правосторонние правила, либо только вида <A>→ <B>a - левосторонние правила.
Доказано, что существуют языки типа 0, не являющиеся языками типа 1, языки типа 2, не являющиеся языками типа 1, и языки типа 3, не являющиея языками типа 2.
выделяют три вида синтаксиса: абстрактный, конкретный и служебный.
Абстрактный синтаксис определяет все типы конструкций языка, их возможные атрибуты и связи, то есть задает структуру графа модели.
Java, C#, C++ и пр. - и многие визуальные языки (например, SDL, WebML) описываются таким способом.
Конкретный синтаксис (сoncrete syntax), другими словами, графическая нотация или просто нотация, - это правила изображения конструкций языка на диаграммах.
Использование "графических" грамматик позволяет определить графические символы и связать их с абстрактным синтаксисом. Но тогда "за бортом" оказываются детали графического расположения конструкций друг относительно друга. Данный способ иногда используется в формальных документах, описывающих какой-либо визуальный язык. Детально графические грамматики будут обсуждаться в следующей лекции.
Служебный синтаксис (serialization syntax) - это формат хранения визуальных спецификаций, выполненных с помощью данного языка. В настоящее время для этих целей применяется, как правило, XML.