Tworzenie języków specyfikacji dla zagadnień numerycznych

Podobne dokumenty
Matematyczne Podstawy Informatyki

Metody Kompilacji Wykład 1 Wstęp

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Webowy generator wykresów wykorzystujący program gnuplot

Metody Kompilacji Wykład 3

Szablony funkcji i klas (templates)

10. Translacja sterowana składnią i YACC

Matematyczne Podstawy Informatyki

Symulacja obliczeń kwantowych

Paradygmaty programowania

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Technologie informacyjne - wykład 12 -

Algorytmy, reprezentacja algorytmów.

Generatory analizatorów

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Podstawy Programowania Obiektowego

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Zad. 3: Układ równań liniowych

Od programowania wizualnego do tekstowego

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

L E X. Generator analizatorów leksykalnych

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

POLITECHNIKA LUBELSKA. Walidacja Modeli Xtext

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

PRZEWODNIK PO PRZEDMIOCIE

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Programowanie współbieżne i rozproszone

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Języki programowania zasady ich tworzenia

Szablony funkcji i szablony klas

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny)

Zapisywanie algorytmów w języku programowania

Matematyczne Podstawy Informatyki

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Programowanie komputerów

1 Symulacja procesów cieplnych 1. 2 Algorytm MES 2. 3 Implementacja rozwiązania 2. 4 Całkowanie numeryczne w MES 3. k z (t) t ) k y (t) t )

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Gramatyki atrybutywne

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Programowanie obiektowe 2 - opis przedmiotu

Klasy abstrakcyjne i interfejsy

Programowanie współbieżne... (10) Andrzej Baran 2010/11

0 + 0 = 0, = 1, = 1, = 0.

C++ Przeładowanie operatorów i wzorce w klasach

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

KONSTRUKCJA KOMPILATORÓW

Obliczenia iteracyjne

Języki formalne i automaty Ćwiczenia 6

Matematyczne Podstawy Informatyki

METODY REPREZENTACJI INFORMACJI

SZKOLENIE TWORZENIE SYSTEMÓW

Podstawy Informatyki Computer basics

Zadanie 2: Arytmetyka symboli

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

WZORCE LOGIKI APLIKACJI Reużywalne składniki wymagań

ALGEBRA Z GEOMETRIĄ MACIERZE ODWZOROWAŃ LINIOWYCH

Szablony klas, zastosowanie szablonów w programach

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Języki formalne i automaty Ćwiczenia 1

Finanse i Rachunkowość studia niestacjonarne/stacjonarne Model Przepływów Międzygałęziowych

Zad. 5: Układ równań liniowych liczb zespolonych

Zadanie analizy leksykalnej

Zdalne monitorowanie i zarządzanie urządzeniami sieciowymi

Efektywna analiza składniowa GBK

Java EE produkcja oprogramowania

Programowanie obiektowe - 1.

Projektowanie oprogramowania

Spis treści. Wprowadzenie 15

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Algorytm. Algorytmy Marek Pudełko

Wybrane działy Informatyki Stosowanej

Podstawy analizy danych numerycznych w języku Python

Lingwistyczny system definicyjny wykorzystujący korpusy tekstów oraz zasoby internetowe.

Środowiska programistyczne dla szkoły podstawowej Jak zachęcić uczniów do startu w konkursach informatycznych

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Podstawy Informatyki. Algorytmy i ich poprawność

Języki i metodyka programowania

Automatyzacja procesu tworzenia sprzętowego narzędzia służącego do rozwiązywania zagadnienia logarytmu dyskretnego na krzywych eliptycznych

Ontologie, czyli o inteligentnych danych

Domain-specific Languages. Języki dziedzinowe. Adam Robaszyński-Janiec

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy i języki programowania

AUTOMATYKA INFORMATYKA

Nasyp przyrost osiadania w czasie (konsolidacja)

Wprowadzenie do szablonów szablony funkcji

1. PODSTAWY TEORETYCZNE

KARTA MODUŁU KSZTAŁCENIA

III TUTORIAL Z METOD OBLICZENIOWYCH

Transkrypt:

Tworzenie języków specyfikacji dla zagadnień numerycznych prof. dr hab. inż. Norbert Sczygiol dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 11 września 2012

Plan prezentacji 1 Wprowadzenie 2 Środowisko do tworzenia języków specyfikacji dziedzinowej PegLi TempLi Gladi 3 Metoda elementów skończonych 4 Język specyfikacji dziedzinowej - Finele Budowa skryptu języka Finele Przykładowe zagadnienie Implementacja zagadnienia 5 Podsumowanie Kkio2012 2

Język specyfikacji dziedzinowej DSL Języki specyfikacji dziedzinowej (DSL - Domain Specific Language) są językami programowania zaprojektowanymi do używania dla określonego zbioru zadań. Są one również nazywane: małymi językami, makrami, językami aplikacji, językami bardzo wysokiego poziomu. Ze względu na sposób ich tworzenia można je podzielić na: wewnętrzne (osadzone), zewnętrzne. Kkio2012 3

Środowisko do tworzenia języków specyfikacji dziedzinowej Rysunek : Środowisko do tworzenia języków specyfikacji dziedzinowej Kkio2012 4

PegLi PegLi - jest biblioteka i generatorem analizatorów składniowych. Ta część środowiska została napisana w języku Python. Do opisu reguł języka wykorzystuje gramatyki wyrażeń parsujących. Kkio2012 5

Wyrażenia parsujące Gramatyka wyrażeń parsujących Każda reguła jest parą w postaci (A, e), zapisywana zwykle w formie A e, gdzie A jest definiowaną reguła, natomiast e jest wyrażeniem parsującym. Wyrażenia parsujące definiuje się w postaci (e, e 1 oraz e 2 są wyrażeniami parsującymi): 1 str - dopasowanie łańcucha znaków, 2. - dopasowanie dowolnego znaku, 3 e 1 e 2 - sekwencja, 4 e 1 /e 2 - uporządkowany wybór, 5 e - zero lub więcej powtórzeń, 6 e + - jedno lub więcej powtórzeń, 7!e - operator negacji. Kkio2012 6

PegLi Parser opisywany jest pomocą dwóch sekcji. Pierwsza (opcjonalna) sekcja dołącza gramatykę zdefiniowaną wcześniej, którą można użyć do opisu składni tworzonego języka (częściowo lub w całości). Kolejna sekcja jest opisem reguł. Składnia używana w niej pokrywa się z omówioną składnią wyrażeń parsujących. Jedynym rozszerzeniem jest możliwość użycia reguł zdefiniowanych w gramatykach zewnętrznych, umożliwienie definiowania akcji semantycznych i instrukcje związane z budową abstrakcyjnego drzewa składni. Kkio2012 7

TempLi TempLi (skrót od Template Library) jest autorskim językiem specyfikacji dziedzinowej oraz biblioteką oprogramowania stworzoną do generowania tekstu z wykorzystaniem zewnętrznych struktur danych. Szablony kodu są transformowane do kodu języka Pyton Szablony kodu biblioteki TempLi składają się z dwóch sekcji: // I sekcja - szablonów i gramatyk using template nazwa; using grammar gramatyka; // II sekcja - atrybutów i wzorców generacyjnych //deklaracja atrybutu $x //definicja wzorca generacyjnego $zmienna($typ, $nazwa) <- $typ $nazwa ; $end Kkio2012 8

Gladi Środowisko programowania Gladi zapewnia podświetlanie składni zarówno dla szablonów jak i dla specyfikacji parsera, generację interpreterów, wsparcie dla operacji edycyjnych. Zostało zaimplementowane w języku C++ z wykorzystaniem biblioteki Qt. Możliwe jest rozszerzanie tego środowiska za posrednictwem systemu pluginów biblioteki Qt. Kkio2012 9

Etapy metody elementów skończonych Rysunek : Etapy uzyskiwania rozwiązania za pomocą metody elementów skończonych (zagadnienia liniowe) Kkio2012 10

Asemblacja macierzy globalnej (1) (4) Σ 0 0 0 0 0 0 0 +... + 0 0 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rysunek : Asemblacja globalnego układu równań z macierzy lokalnych (gwiazdkami oznaczono miejsca wprowadzenia współczynników do globalnego układu równań) Kkio2012 11

Języki specyfikacji dla MES Języki osadzone: PIER - Common Lisp, Analysa - Scheme, MyFem - Python, Feel++ - C++. Języki zewnętrzne: FreeFEM, GetDP. Kkio2012 12

Język specyfikacji dziedzinowej - Finele Język specyfikacji Finele został zaprojektowany do wspierania tworzenia zadań za pomocą metody elementów skończonych z szczególnym uwzględnieniem budowania macierzy lokalnych i wprowadzania warunków brzegowych. Bazuje on na spostrzeżeniu, że niektóre etapy tworzenia rozwiązania są wspólne dla różnych zastosowań (odczyt danych wejściowych, zapis wyników, asemblacja macierzy globalnej) i mogą być automatycznie wygenerowane dla potrzeb programu, bez jawnej ich implementacji. Język jest zaprojektowany do budowy procesorów metody elementów skończonych. Kkio2012 13

Budowa skryptu języka Finele Skrypt w języku Finele składa się z sekcji opisujących poszczególne składowe zadania. Sekcja rozpoczynająca się od słowa kluczowego MaterialProperty wyszczególnia wszystkie własności materiałowe stosowane do budowy zadania, które są wprowadzane za pomocą preprocesora. Następna część jest odpowiedzialna za opis solwera (solwer - program lub część programu realizująca obliczenia). Wymieniane są tutaj niewiadome uzyskiwane po rozwiązaniu układu równań (podsekcja niewiadomych), deklaracje pomocniczych macierzy, wektorów i wielkości skalarnych (sekcja deklaracji), a także sposób budowania macierzy lokalnej dla elementu (podsekcja budowniczego). Przyjęto konwencję macierzową. Ostatnia sekcja BoundaryConditions opisuje warunki brzegowe. Kkio2012 14

Zastosowane podejście Rysunek : Składniki języka specyfikacji wraz z etapami generowania kodu Kkio2012 15

Przykładowe zagadnienie Równaniem wyjściowym, dla niejawnego schematu całkowania po czasie, jest: (M n+1 + tk n+1 )T n+1 = M n+1 T n + tb n+1 (1) Macierze M i K w tym równaniu oblicza się z zależności: M = cρ N T N da (2) K = λ A A T N N da (3) Kkio2012 16

Przykładowe zagadnienie MaterialProperty{ lambda; c; rho; } Solver Heat{ unknowns -> T; builder: << c * rho >*(w Trans,N)*dx + dt * <lambda> * (Nabla w Trans, Nabla N)*dx> * T = <<c * rho> * (w Trans,N)*dx> * T[-1]; } Kkio2012 17

Przykładowe zagadnienie BoundaryConditions{ bc Neumann{ coeff -> q; builder: <q>*(w Trans,N) * ds; } } Kkio2012 18

Implementacja zagadnienia main.cpp - zawiera funkcję main(), solver.h - zawiera definicję klasy solwera, solver.cpp - zawiera implementacje metod solwera, elements.h - zawiera definicje klas opisujących elementy skończone oraz definicję ich metod, bcs.h - zawiera definicje klas implementujących warunki brzegowe, bcs.cpp - zawiera definicje metod klas warunków brzegowych, materials.h - zawiera definicje klas obsługujących własności materiałowe, materials.cpp - zawiera definicje metod klas własności materiałowych, Makefile - zawiera skrypt programu make. Kkio2012 19

Implementacja zagadnienia Rysunek : Implementacja zagadnienia z wykorzystaniem biblioteki ensc Kkio2012 20

Podsumowanie Praktyczne zastosowanie narzędzi i technik pokazanych w prezentacji pozwala na szybkie przygotowanie języków specyfikacji dziedzinowej. Wprowadzone ułatwienia obejmują zintegrowane środowisko programowania automatyzujące proces budowy języka specyfikacji dziedzinowej. Dzięki opartej na gramatykach wyrażeń parsujących bibliotece i generatorowi PegLi, zmniejszono trudności związane z przygotowaniem parserów dla języków specyfikacji. W ramach pracy stworzono również bibliotekę TempLi upraszczającą tworzenie szablonów kodu. Zaprezentowane narzędzia znalazły praktyczne zastosowanie przy implementacji deklaratywnego języka specyfikacji Finele - zaprojektowanym do realizacji zadań za pomocą metody elementów skończonych. Kkio2012 21

Dziękuję za uwagę Kkio2012 22