Лингвистическое и программное обеспечение САПР Вводная лекция Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. О чем этот курс САПР - системы автоматизированного проектирования САПР - сложный программный комплекс Основные задачи САПР автоматизация оформления документации; информационная поддержка и автоматизация процесса принятия решений; использование технологий параллельного проектирования; унификация проектных решений и процессов проектирования; повторное использование проектных решений, данных и наработок; стратегическое проектирования; замена натурных испытаний и макетирования математическим моделированием; повышение качества управления проектированием; применение методов вариантного проектирования и оптимизации. Некоторые задачи САПР Информационная поддержка и автоматизация процесса принятия решений Замена натурных испытаний и макетирования математическим моделированием; Требуется программирование Составные части САПР Обслуживающие подсистемы (оболочка) Проектирующие подсистемы: Объектные (для целевой модели) Инвариантные (для различных типов моделей) Сложность решаемых задач порождает сложность решения и инструментов Лингвистическое обеспечение САПР Большинство САПР имеет встроенный язык программирования LISP (AutoLISP) VisualBASIC lua python ... Программирование модели A = [1,2,3 4,5,6 7,8,9] B = [11,12,13 14,15,16 17,18,19] C = zeros(3,3) C = A + B Пример реализации сложения матриц на разных языках программирования #include <stdio.h> #include <stdlib.h> #define N 3 int main() { int i, j; int a[N][N]; int b[N][N]; int c[N][N]; … for (i=0;i<N;i++) { for (j=0;j<N;j++) { c[i][j] = a[i][j] + b[i][j]; } } ... Language-oriented programming Стиль разработки программного обеспечения, при котором вместо решения задачи с помощью языков общего назначения (general-purpose programming languages) сперва создается один или более предметно-ориентированных языков (domain-specific languages - DSL) для задачи, а затем задача решается на этих языках. Цели курса Научиться создавать собственные языки программирования/проектирования (DSL) Структура курса Теория конечных автоматов. Теория синтаксического анализа. Виртуальные машины. Техника компиляции программ. Вопросы? Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Основы синтаксического анализа и компиляции Основные понятия Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Язык и сознание Язык определяет сознание… // И. Бродский. Бытие определяет сознание… // Классики марксизма-ленинизма Символ Что есть символ? а 人 ♂ ♫ Сколько символов в русском языке? Дайте определение символа Определение символа Символ - первичное не определяемое понятие Свойство: атомарный (неделимый) Иногда называют буквами по аналогии с алфавитами естественных языков. Алфавит Алфави́т — множество символов какоголибо формального языка. Символы входящие в алфавит называют “терминальными символами”. Примеры алфавитов Русский алфавит; {.,-} - азбука Морзе; Китайский алфавит; {0,1} - алфавит двоичных чисел; {0,1,2,3,4,5,6,7,8,9} - алфавит целых натуральных чисел. Язык Формальный язык — множество конечных слов (строк, цепочек) над конечным алфавитом. Используемые обозначения a, b, c… - терминальные символы (либо самим символом, например, 0, 1, ‘a’) A,B,C… - нетерминальные символы z, y, x… - цепочки терминальных символов α, δ, γ… - цепочки символов Σ - множество терминальных символов N - множество нетерминальных символов Операции над цепочками xy - конкатенация цепочек x и y |x| - длина цепочки x xn - повторение n раз цепочки x x* - повторение x от 0 до ∞ раз x+ - повторение x от 1 до ∞ раз Определение языка L - язык Σ* - множество произвольных цепочек из терминальных символов Тогда: L∈Σ* Способы описания языка перечислением всех строк; формальной грамматикой; регулярным выражением; конечным автоматом; БНФ-конструкцией. Понятие грамматики Грамматика — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. Виды грамматик порождающие грамматики — задают правила, с помощью которых можно построить любое слово языка; распознающие (или аналитические) — позволяют по данному слову определить, входит ли оно в язык или нет. Определение грамматики G=(Σ, N, P, S) Σ — алфавит; N — множество нетерминальных символов; P — множество правил; S — аксиома (или начальный символ) грамматики из набора нетерминалов. Правила грамматики P - есть множество правил вида: α→β где α,β∈(Σ∪N)*, то есть, цепочки из терминальных и нетерминальных символов. Иерархия Хомского Классификация грамматик тип 3 тип 2 Чем меньше кусок, тем меньше таких грамматик существует тип 1 тип 0 Грамматики типа 0 Грамматики без ограничений. Все естественные языки принадлежат данному классу грамматик. Грамматики типа 1 Контекстно-зависимые (КЗ) αAβ→αγβ, где α,β∈(Σ∪N)*, γ∈(Σ∪N)+, A∈N Неукорачивающие грамматики α→β, α,β∈(Σ∪N)+, 1≤|α|≤|β| Эти типы грамматик эквивалетны Грамматики типа 2 Контекстно-свободные (КС) A→β, где β∈(Σ∪N)*, A∈N Грамматики типа 3 Регулярные (автоматные) A→Bx (леволинейные) A→xB (праволинейные) где x∈Σ*, A,B∈N Классификация языков Языки классифицируются в соответствии с типами грамматик, которыми они задаются. Примечание: один и тот же язык может быть задан разными грамматиками, относящимися к разным типам. В таком случае, считается, что язык относится к наиболее простому из них. Вопросы? Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Основы синтаксического анализа и компиляции Конечные автоматы Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Finite-state machine Конечный автомат — абстрактный автомат, число возможных состояний которого конечно. Результат работы автомата определяется по его конечному состоянию. Способы задания КА M = (Σ, N, F, P, S), Σ — алфавит; N — множество состояний; F∈N — множество конечных состояний; P — множество правил переходов; S∈N — начальное состояние. Правила перехода N×(Σ∪λ)→N, где λ - пустая цепочка. Графическое описание КА А 0 B 1 C 0 Описываемые цепочки: 01, 01001, 01001001... Описание КА в виде грамматики Σ = {0,1} N = {A,B,C} F = {C} S=A P={ A→0B, B→1C, C→0A, C→λ} Табличное описание КА 0 1 A B error B error C C A error λ done Алгоритм разбора по КА 0. Текущее состояние R = S, x = входная строка 1. Если x==λ, то 2. Если R∈F, разбор окончен, строка принадлежит 3. Иначе, разбор окончен, строка не принадлежит. 4. Иначе, 5. k = взять левый символ из x (и удалить из x) 6. M = переход из R по k 7. Если M == error, то разбор окончен, строка не принадлежит. 8. Иначе, R = M, шаг 1. 9. конец. Детерминированный КА Недетерминированные КА Графическое описание НДКА 1 А 0 B 0 1 C Табличное описание НДКА 0 1 A B error B error A,C C A error λ done Алгоритм разбора по НДКА домашнее задание Теорема о детерминизации Из любого НДКА можно получить эквивалентный ему ДКА. Примечание: иногда количество состояний и переходов в ДКА, полученном из НДКА столь велико, что такое преобразование нецелесобразно. Вопросы? Курс лекций по дисциплине “Основы синтаксического анализа и компиляции” автор Сергей Борисов (AKA risik) доступна на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.