Лингвистическое и программное обеспечение САПР Вводная лекция

advertisement
Лингвистическое и
программное
обеспечение САПР
Вводная лекция
Курс лекций по дисциплине “Основы синтаксического анализа и
компиляции” автор Сергей Борисов (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.
Download