983b9e08b5658dc0fce4af1759a79e50.ppt
- Количество слайдов: 22
XIX Всероссийская конференция «Научный сервис в сети Интернет» Резервы синтаксически ориентированного конструирования систем программирования Л. В. Городняя Институт систем информатики СО РАН, НГУ lidvas@gmail. com
Интеллектуальный вызов системному программированию Фр. Брукс в своей знаменитой книге отмечал, что трудоёмкость решения задачи в виде компонента программы примерно в три раза выше трудоёмкости разработки автономной программы, а трудоёмкость создания компонента для многопрограммного комплекса ещё выше. В. Е. Котов отмечал, что системному программированию не хватает уровня абстрагирования, сравнимого с дифференциальным и интегральным исчислением. А. Л. Фуксман предлагал методику вертикального слоения программ, концептуально близкую аспектно-ориентированному программированию (сосредоточенное представление рассредоточенных действий), допускающую автономное развитие выделенных компонент.
Реабилитация дискредитированных преждевременной реализацией программистских идей Всегда доступно всё, что было представлено в программе — комментарии, макросы и макровызовы, идентификаторы, описания и структуры данных. Система сохраняет все результаты анализа и любых эмпирических решений. Существует общий центр хранения библиотек, тестов, результатов прогона, документации и т. п. - всего, что может пригодиться в других программах. Система предназначена для серии сеансов отладки, включая сопоставление результатов разных сеансов. Поддерживается развитие постановки задачи (надзадачи, подзадачи). При формализации постановок задач, освобождающей от конкретных легенд, возможен диалог в исходных терминах. Преобразования данных обратимы — всегда можно восстановить исходный вид.
Пользовательский интерфейс - полиморфное определение синтаксиса для разного уровня применений (учебное, экспериментальное, производственное и др. ) - билингвистический (english + русский) интерфейс - типовые форматы внятных диагностических сообщений - речевое сопровождение программ на естественном языке
Модифицированные БНФ - программируемое расширение формализмов - локализация редко используемых метапонятий - определение синтаксических функций над конечными множествами терминалов, - задание синтаксических позиций с помощью произвольных префиксов - утончение и пересечение языков, заданных разными грамматиками.
Техника отладки определения языка - типизация фрагментных переменных - эквивалентность и подобие текстов - наложение действий на синтаксическое дерево по образцу данных - смягчение зависимости понимания языка от имён метапонятий - декомпозированное определении семантики и прагматики (автономно развиваемые компоненты) - средства редукция грамматики по тестовому набору
Конструируемые системы программирования - накопление прецедентов конкретизации понятий при анализе примеров программ - одновременное существование определений семантики и прагматики - мультипарадигмальность прагматики - упорядочение и расслоение критериев семантической, прикладной, прагматической и парадигмальной декомпозиции программ.
Число метапонятий: С - 110 → C++ - 270 75 – без альтернатив 24 – переименование 59 – лексика 17 - макро 47 – выражения 13 – операторы 41 - ООП 88 – декларации
Частота вхождения понятий в синтаксис identifier: 59 nested-name-specifier: 19 expression: 14 cast-expression: 13 constant-expression: 12 decl-specifier-seq, statement: 11 braced-init-list, postfix-expression, simple-template-id: 10 declarator, digit, pp-number: 8 expression-list, initializer-clause: 7 compound-statement, id-expression, type-name, type-specifier-seq: 6 abstract-declarator, assignment-expression, condition: 5
Частота вхождения понятий на 30 страницах определения синтаксиса identifier: 59 nested-name-specifier: 19 expression: 14 cast-expression: 13 constant-expression: 12 decl-specifier-seq, statement: 11 braced-init-list, postfix-expression, simple-template-id: 10 declarator, digit, pp-number: 8 expression-list, initializer-clause: 7 compound-statement, id-expression, type-name, type-specifier-seq: 6 abstract-declarator, assignment-expression, condition: 5
Локальное определение id-expression: unqualified-id ( qualified-id: nested-name-specifier template opt unqualified-id )
Перечни через разделитель сapture-list: ( ( capture. . . opt ) / , ) ) /– перечень через запятую and-expression: ( ( equality-expr ) / & ) ) /– перечень через «&» additive-expression: ( ( multiplicative-expr ) / { + -} ) ) /– перечень через «+» или «-» «+»
unary-expression symbol ТАБ ( symbol ) ++ – * & + - ! ~ cast-expression sizeof { unary-expression | ( type-id ) |. . . ( identifier ) } alignof ( type-id ) noexcept ( expression ) : : { new-exp | delete del-exp } new New-placement { new-type-id | new-type-id new-initializer | ( type-id ) |( type-id ) new-initializer } delete ( del-exp : : = { cast-expression | [ ] cast-expression } )
Инфиксные выражения pm-expression: cast-expression pm-expression. * cast-expression pm-expression ->* cast-expression. . . logical-or-expression: logical-and-expression logical-or-expression || logical-and-expression
Конструктор правил (Map. Red. Name. List 'pm-expression 'logical-or-expression #'Subst. Rule '( {. * ->* } { * / % }{ + - }{ << >> }{ < > <= >= }{ == != } & ^ | && || ) ) Subst. Rule = (New. NT NT Sign) ( list New. NT ': (list NT '/ Sign) )
Map. Red. Name. List (First Last Fsubst Sign) First — исходное понятия, Last — заключительное понятие, Fsubst — отображение, Sign — список инфиксных операций, упорядоченный по приоритетам. Строим список LNew. NT длины (#SL-1) из различных новых имён, в конец его копии LNT встраиваем имя Last, а в начало - First. После этого поэлементно отображаем списки LNew. NT LNT SL через шаблон «( list LNew. NT ': (list NT '/ Sign) )» в последовательность элементов определений. New. NT NT Sign – Элементы списков LNew. NT LNT SL соответственно.
Абстрактная декомпозиция Венская методика DSL: LLVM-Clang КС ↔ АС DSL → AST ↓ АМ → КМ IR → MSP Существует отображение конкретного синтаксиса (КС) в конкретного синтаксиса (DSL) в абстрактный (АС) и обратно. дерево абстрактного синтаксиса (AST). АС отображается в абстрактную AST отображается на язык машину (АМ). виртуальной машины (IR). АМ реализуется с помощью IR реализуется с помощью конкретной машины (КМ). конкретной платформы (MSP) на базе языка Си.
Пример // Example. c #include
C→ AST ( Var. Decl global ‘int’ ) ← AST for global ( Function. Decl ‘void main (int, char **)’ ) ← AST for main ( ) |-------> (Parm. Var. Decl argc 'int') |-------> (Parm. Var. Decl argv 'char**' ; 'char**') |-------> [Compound. Stat ] |----> [Decl. Stat] | |----> (Var. Decl param 'int') | |-----> [| Integer. Literal 1 'int' |] |----> [| Call. Expr 'void' |] | |----> [| Implicit. Cast. Expr 'void (*) ()' |] | | |----> [| Decl. Ref. Expr 'my. Print' 'void (*) ()' |] | |----> [| Implicit. Cast. Expr 'int' |] | |---> [| Decl. Ref. Expr 'param' 'int' |] |----> [Return. Stmt ] |----> [| Integer. Literal 0 'int' |]
AST → Lisp ; Комментарии не имеют представления ; Макросы не имеют представления (Var. Decl global 'int) (Function. Decl main (int, char *) (Parm. Var. Decl argc 'int) (Parm. Var. Decl argv 'char**) (Compound. Stat (Decl. Stat (Var. Decl param 'int) (Integer. Literal 1 'int) ) (Call. Expr 'void (Implicit. Cast. Expr 'void '(*) '() ) (Decl. Ref. Expr 'my. Print 'void () ) (Implicit. Cast. Expr 'int ) (Decl. Ref. Expr 'param 'int) ) (Return. Stmt (Integer. Literal 0 'int) ) ) )
Системный анализ в программировании К. Лоренц даёт вполне конструктивное определение понятия «система» , сводит его к возможности в человеческой речи называть сложное одним словом. https: //www. livelib. ru/book/1000334658 -tak-nazyvaemoe-zlo-konradlorents сайт с текстом книги Конрада Лоренца «Так называемое зло» в переводе А. И. Федорова (А. И. Фета). http: //www. rulit. me/books/tak-nazyvaemoe-zlo-read-311025 -1. html сайт с возможностью чтения книги Конрада Лоренца «Так называемое зло» в переводе А. И. Федорова (А. И. Фета)
Спасибо за внимание!


