Deklaratív nyelvek alkalmazása következtetési feladatokra
Szerkesztő:Csébfalvi Balázs
Szerkesztő elérhetősége:cseb@iit.bme.hu

Téma galéria megtekintése

 

Projekt előrehaladási jelentés

 

Deklaratív programozási nyelvek segítségével számtalan problémát lehet tömören és magas absztrakciós szinten megfogalmazni. Ennek köszönhetően a programozó arra öszpontosíthat, hogy mit szeretne megoldani és kevésbé kell aggódnia azon, hogy ezt hogyan oldja meg. A Prolog egy logikai programozási nyelv, mely a deklratív nyelvek családjába tartozik. A Prolog rendelkezik egy beépített következtető mechanizmussal, aminek segítségével komplex következtetési feladatokat lehet megoldani. Számos egyéb alkalmazási terület mellett, ez a nyelv különösen alkalmas nyelvtani elemzésre. Jelen projekt keretében azt vizsgáljuk, hogy hogyan lehet logikai programozás segítségével programozási nyelvek típuselemzését elvégezni. A típusellenőrzés segít különféle programozási hibák korai felderítésében, ezáltal jelentősen megkönnyítve a programfejlesztés folyamatát.

Elkészítettünk egy típusellenőrző rendszert a Q funkcionális nyelvhez. A program bemenetként kap egy Q programot és eldönti, hogy a program típushelyes-e. Nemleges válasz esetén a rendszer rámutat a hibás kódrészletre és egy hibaüzenet formájában megmagyarázza, hogy miért tartja az adott részt típushibásnak.

            A típusellenőrző rendszer Prolog programozási nyelven készült. A bemenetként kapott programot először egy lexikai elemző tokenek sorozatára bontja, majd a szintaktikai elemző felépít egy absztrakt szintaxis fa adatstruktúrát, melyben minden csomópont a program egy részkifejezését reprezentálja. A szintakikai elemzéshez Definit Klóz Nyelvtanokat használtunk (Definite Clause Grammars – DCG), mely roppant kényelmes megoldásnak bizonyult.

            Az absztrakt szintaxis fán dolgozik maga a típusellenőrző. A típuskövetkeztetést egy korlát kielégítési feladatként értelmeztük, melynek megoldására a Prolog Constraint Handling Rules (CHR) könyvtárát használtuk fel.

            Elkészült a következtető rendszer. A felhasználónak lehetősége van típusdeklarációkat ágyazni bele a forráskódba. Evvel egyrészt expliciten rá lehet kérdezni, hogy egy adott kifejezés típusa ténylegesen megfelel-e a programozó által elvárt típusnak. Másrészről a típusdeklarációk segítségével a programozó plussz információt adhat a típusellenőrző számára, melyet önmagától nem lenne esélye kitalálni (mert például egy adott változó értékét futás közben olvassuk be állományból és így előre nem állapítható meg a típusa).

            A rendszer alapos tesztelése elkezdődött. Sok saját kézzel gyártott bemenetre jó eredményeket kaptunk. Evvel párhuzamosan a projektparnerünk, a Morgan Stanley Business and Technology Centre, Budapest átvette a programot és elkezdte tesztelni a saját programjaikon. Az ő tesztjeik eredményeire még várunk. Teszteket futtattunk továbbá nagyobb méretű internetről letölthető Q nyelvű programokon. Ezek a programok mind típushelyesek, így a tesztekből nem egyértelmű, hogy mennyire hatékonyan tudunk típushibákat megtalálni nagyobb programokban. Ami viszont jellemző, hogy az elkészített program nem támogatja a teljes Q nyelvet annak minden kivételével együtt, hanem tartalmaz bizonyos megszorításokat. Ezen megszorításokat a Morgan Stanley kérésére építettük bele a programba, hogy ezáltal kényszeríthesse a cég a programozóit bizonyos programozási konvenciók tiszteletben tartására, az átláthatóság biztosítására. Másrészről vannak olyan nyelvi elemek, melyeket a Morgan Stanley egyáltalán nem használ a programjaiban és nem kérte a támogatásukat. Ennek megfelelően az interneten található programok között vannak olyanok, melyekben a rendszerünk típushibát jelez, pedig a program maga helyesen fut a Q interpreterben.

A munka szakmai tartalma kapcsolódik a "Új tehetséggondozó programok és kutatások a Műegyetem tudományos műhelyeiben" c. projekt szakmai célkitűzéseinek megvalósításához. A projekt megvalósítását a TÁMOP-4.2.2.B-10/1--2010-0009 program támogatja.
Infoblokk
ÚSZT