Fables funkcion lis programoz si nyelv gens alap szimul ci khoz
Download
1 / 25

- PowerPoint PPT Presentation


  • 107 Views
  • Uploaded on

Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz. Legéndi Richárd Olivér legendi@inf.elte.hu diplomavédés 2009. január 27. Mi is a Fables?. Alapvetően egy funkcionális nyelv: Funkcionális paradigmák: változók, konstansok, relációk definiálására

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '' - farica


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Fables funkcion lis programoz si nyelv gens alap szimul ci khoz

FablesFunkcionális programozási nyelvágens-alapú szimulációkhoz

Legéndi Richárd Olivér

legendi@inf.elte.hu

diplomavédés

2009. január 27.


Mi is a fables
Mi is a Fables?

  • Alapvetően egy funkcionális nyelv:

    • Funkcionális paradigmák:változók, konstansok, relációk definiálására

    • Objektum elvűség:ágensek definiálása osztályokkal

    • Imperatív nyelvi elemek az események leírására

  • Egyszerű, tömör, engedékeny szintaxis – erre törekedtünk

  • Típusnélküliség


P lda
Példa

  • model Példa {

  • var x := "String";

  • konstans = 5;

  • függvény(x) = 2*x;

  • class Ágens {

  • var id;

  • }

  • startUp {

  • new Agent[id:=0];

  • }

  • }


Mi rt kellett egy j nyelv
Miért kellett egy új nyelv?

  • A szimulációk eddigi eszközei:

    • Swarm (1996): az első szimulációs csomag, kísérleti jelleggel

    • MAML (1999): az első szimulációs nyelv, a Swarmra épül

    • RePast (2001): Javas szimulációs csomag (API)

  • A problémák:

    • Elég bonyolultak

    • Komoly programozói tapasztalatot igényel a használatuk(pl. OO szemlélet, GUI programozás, stb.)

  • Elsődleges felhasználói réteg:szociológusok, társadalomkutatók, közgazdászok, …


Fables funkcion lis programoz si nyelv gens alap szimul ci khoz
Cél

  • Egy olyan nyelv létrehozása, amely:

    • Egyszerű, minimális programozói tapasztalatot feltételez

    • Nyelvi szinten támogatja ágens-alapú szimulációk létrehozását, irányítását és megfigyelését

    • Szintaxisa tükrözi a tudományos cikkekben használt formalizmust


Funkcion lis paradigm k
Funkcionális paradigmák

  • Változók,konstansok

  • Függvények,Lokális definíciók,Elágazások

  • Felsorolási,intervallum és halmaz típusok

var x;

méret = 100;

randomBit = discreteUniform( 0, 1 );

között(x, y, z) = x < y < z;

signum(a) = a<0 => -1

| a == 0 => 0

otherwise 1;

négyzetszámok =

{ x^2 : x is[-10..10]};


Imperat v paradigm k
Imperatív paradigmák

  • Inicializálás:

    • seed() beállítása

    • Paraméterek

    • Ágensek létrehozása

  • Ütemezők:

    • Bárhol definiálhatóak

    • Ciklikus / nem ciklikus

    • Nevesített: dinamikusan létrehozható/törölhető

startUp (ágensek) {

seed(0);

printLn( "Inicializálás..." );

[ newÁgens[ money := 0 ] :

_ is [1.. ágensek] ];

}

scheduleFőÜtemezőcyclic 10 {

1 : printLn("1, 11, 21, ...") ;

2 : printLn("2, 12, 22, ...") ;

}

névListázás = for each a in Ágens do

printLn ( a.név ) ;


P lda modell
Példa modell

// Vándorló hangyák: ~15 sor kód

model Ants {

antNum = 100;

worldSize = 100;

norm (x) = x mod worldSize;

class Ant {

var pos;

move(x) = pos := norm( pos + x );

schedule Stepper cyclic 1 {

1:move(discreteUniform(-1,0,1));

}

}

antsAt = [ a.pos : a is Ant ];

startUp {

seed(1984);

[ new Ant[ pos:=worldSize/2 ] :

i is [1..antNum] ];

}

}



A nagyobb r szfeladatok
A nagyobb részfeladatok

  • Értelmezés:

    • szintaktikai ellenőrzések

    • szintaxisfa felhúzása

  • Típusozás

    • minden kifejezésre, változóra

  • [Charting Wizard]

    • a lehetséges adatforrások megadása

  • Kódgenerálás, Optimalizáció

    • modell, GUI, tényleges producerek


M k d s
Működés

Forrásállományok

Result

IME

Eclipse

Fables forrás

Java importok

Chart leírók

Hibalista

Modell

GUI kód

Dokumentációk

Compiler


A compiler
A Compiler

Java importok

Lexer

Szintaktikus

Elemző

Precompiler

Fables forrás

Transformator

Típusozó

Generált

források

Informator

CP

Kódgenerátor


Hibajelz s
Hibajelzés

Lexer

Szintaktikus

Elemző

Precompiler

Típusozó

Transformator

Informator

Kódgenerátor


A compiler1
A Compiler

Java importok

Lexer

Szintaktikus

Elemző

Precompiler

Fables forrás

Transformator

Típusozó

Generált

források

Informator

CP

Kódgenerátor


Dokument ci gener l s
Dokumentáció generálás

Lexer

Szintaktikus

Elemző

Precompiler

Fables forrás

Típusozó

Generált

doksik

Kódgenerátor


Architekt ra
Architektúra

  • IME  Fordító

  • Fordító:

    • Értelmező: source  tokenek, szintakszisfa

    • Előfordító: szintakszisfa  reprezentációs fa

    • Transformator: reprezentációs fán apróbb változtatások

    • Típusozó: felcímkézi a fát a típusinformációkkal

    • Fordító   Charting PackageÚj chart létrehozása, meglévő editálásaModel informátor: reprezentációs fa  chartok

    • Compiler: reprezentációs objektumok  kódobjektumok kódobjektumok  generált forrás (Közben optimalizáció)

  • A fordító a végén visszaad egy eredmény objektumot

    • Hiba és figyelmeztetési listák

    • Generált forráskódok


Rtelmez k
Értelmezők

  • JavaCC által generált parser:

    • Nyelvtan leírás (EBNF)  JavaCC  Parser

  • Grammar.jjt

    • Globálisan LL-1 nyelvtan

    • Lokálisan LL-2

  • AST objektumok ezekből áll össze a szintaxisfa


El ford t
Előfordító

  • A szintaxisfa alapján felépítünk egy saját reprezentációt a modell köré.

  • Bejárjuk az egész fát, ez alapján építkezünk.

  • Az eredmény nem egy fa lesz, hanem egy a modellt reprezentáló objektum.

  • A továbbiakban ezen az objektumon dolgozunk.


Transzform ci k
Transzformációk

  • Apróbb beállítások a modellen, amik feltételezik annak teljességét

    • Mi legyen konstans, változó ill. függvény? Fablesben definiált konstans nem feltétlen az, sőt!Pl.: random = uniform(0,1);Függőségi halmazok alapján:

      • Ha értéke fordításnál meghatározható => konstans

      • Ha paramétertől függ => inicializálandó változó

      • Ha pl. véletlentől függ => változó

      • Ha olyan konstanstól függ

    • Lokális változók felcímkézése


T pusoz s i
Típusozás I

  • Az alapötlet: minden típust kideríthetünk az értékadásokból

    • Konstansok típusa adott (x=5)

    • Minden változónak csak 1 típusa lehet, azt az értékadásokból derítjük ki (y:=x)

    • Beépített függvényeknél a típust a paraméterek típusainak ismeretében ki lehet deríteni (z = 2+ 3*x)

    • Ezek alapján a felhasználói függvények típusai meghatározhatóak rekurzívan ( f(u) = u + 2*z )


T pusoz s ii
Típusozás II

  • Ha még nem ismerjük a paraméterek típusát?

    • Iteratív feldolgozás

  • Konverziók

    • x := 5; x:=2.1 – double vagy int? => double upcast

    • nem castolható eredmények  TypeMismatch

  • Mi legyen, ha ugyan az a függvény más-más típusú argumentumokkal szerepel?

    • Függvénycsaládok generálása pl. f(1);…;f(0.5) => int f(int), double f(double)

  • Értékadás szerű függvények?

    • Pl. union() halmazokra, mátrix (i,j)-edik elemének beállítása, stb.


Optimaliz ci i
Optimalizáció I

  • Függvényekben új lokális konstansok bevezetése

    • Olyan függvényhívásokra, aminek a függőségei nem változnak a két kódrészlet között

  • Inverz relációk számolása

    • Adott tulajdonságú ágenseket nem iterálva, hanem hasheléssel keressük meg

      • { a is Agent when a.member == f(x) } => hashset.get(f(x))

      • { a.member : a is Agent … } => keySet() használatával

  • Ahol lehet, natív tömbhasználat

    • Vectorok, Set-ek helyett

    • Nem mindig lehet, függhet a véletlentől, állapotváltozásoktól az iteráció


Optimaliz ci ii
Optimalizáció II

  • Programinverzió

    • A felesleges közbülső adatszerkezetek eliminálása

  • Kis ellentmondás: olvasható kód generálása

    • Haladó felhasználóknak fontos!

    • Emiatt nem helyettesítjük a konstansokat az értékükkel, nem vonjuk össze a kiértékelhető értékeket, stb.


Seg deszk z k
Segédeszközök

  • Dokumentáció generátló ezsközök

    • Modellből egy cikk vázlata

    • Nagyban hasonlít pl. a javadoc-ra

    • Dokumentációs comment: ”/**” ill. ”*/”

    • Több formátum:

      • HTML, PDF, RTF, LaTeX forrás

  • Saját Eclipse-alapú fejlesztőkörnyezet

  • RePasttól független megjelenítő csomag:

    • Egyszerűbb, független

    • A GUI generálása egy leírófájl alapján történik, amit a Charting Package generál le


Sszefoglal s
Összefoglalás

  • Funkcionális nyelv, tömör szintaxis

  • Típusok nélkül dolgozunk

  • Hasznos eszközkészlettel rendelkezik

  • Köszönöm a figyelmet!