170 likes | 292 Views
Tarkvara grammatika-põhine visuaalne modelleerimine ja konverteerimine. Jüri Kiho ATI seminar 25.03.2004. http://www.cs.ut.ee/~kiho/ftp/ettekanne.ppt. Konverteerimise mõiste Kuidas automatiseerida konverterite loomist? Lahenduse idee Näiteid süsteemis Amadeus-fRED. Viited.
E N D
Tarkvara grammatika-põhine visuaalne modelleerimine ja konverteerimine Jüri KihoATI seminar25.03.2004 http://www.cs.ut.ee/~kiho/ftp/ettekanne.ppt
Konverteerimise mõiste • Kuidas automatiseerida konverterite loomist? • Lahenduse idee • Näiteid süsteemis Amadeus-fRED
Viited [Heero] Heero, Kristo. Java parserite generaator JavaCC ja skeem- modelleerimine. Magistritöö. TÜ, 2002 [Reitsakas] Reitsakas, Aleksander. Analüüsivahend JJTree/JavaCC ja selle rakendamine toimetiarenduses. Magistritöö. TÜ, 2002 [SKMXML] Kiho, Jüri. Sketchy Modeling for XML. Proceeding of the 7th Symposium on Programming Languages and Software Tools SPLST'2001, University of Szeged, Hungary June 15-16, 2001, 183-197 [SKM] Kiho, Jüri. SKM. Sketchy Modeling of Computer Texts, Research Report University of Tartu, Estonia, 2000, 64 pp [JavaCC] https://javacc.dev.java.net/ (last visited: March 2004) [JJTree]https://javacc.dev.java.net/doc/JJTree.html(last visited: March 2004) [XFlat] http://www.unidex.com/xflat.htm(last visited: March 2004) [DLG] Hennoste, Tiit and Koit, Mare and Strandson, Krista and Rääbis, Andriela and Valdisoo, Maret and Vutt, Evely. Directives in Estonian Information Dialogues. Text, Speech and Dialogue. 6th International Conference TSD (ed. V Matousek, P Mautner). Springer, 2003, 406-411 [X-FetchWrapper] http://www.x-fetch.com/wrapper.html(last visit: March 2004)
Tarkvara konverteerimine on lihtsamat sorti transleerimine. n 2 n m 3 m ? n > m n – m x m – n x n = n / 2; m = m * 3; if(n > m) x = n - m; else x = m - n;
Lähte- ja sihtkeele primitiivid on (enam-vähem) ühed ja samad. n 2 n m 3 m ? n > m n – mx m – n x n = n / 2; m = m * 3; if(n > m) x = n - m; else x = m - n;
n 2 n m 3 m ? n > m n – mx m – n x n = n / 2; m = m * 3; if(n > m) x = n - m; else x = m - n; <programm> <omistus siht = “n”> <avaldis> <jagamine jagatav = “n” jagaja = “2” /> </avaldis> </omistus> <omistus siht = “m”> <avaldis> Konkreetse konversiooni aluseks olev reeglistik moodustab konversiooni- mudeli.
Põhimõtteline võimalus: iga konversioonitüübi (lähtekeel, sihtkeel, mudel) jaoks kirjutada oma konverter. Konverter1 Konverter2 Konverter3 Konverter4 . . . Pisike lihtsustus: sihtkeel on fikseeritud, nt XML, skeemkeel [SKM]. Ikka jääb konverterite loomise automatiseerimise vajadus. Üks tee: piirduda väga lihtsate lähtekeeltega (CSV – comma separated values) [XFlat] Teine tee: võtta kasutusele uus keel, DEL – data extraction language [X-FetchWrapper] + GUI; kirjeldamaks, kuidas lähte- keelest hangitakse primitiivid. Kolmas tee: konverterigeneraator, (LK, SK,M) ==> Konverter [Heero] [Reitsakas] Neljas tee:
Probleemi seade • Konversioonitüüp: (lähtekeel, sihtkeel, mudel). • Iga vajaliku konversioonitüübi jaoks tuleb luua oma konverter. • Konversioonitüüpe on palju. • Kitsendatud ülesanne: sihtkeel SK on fikseeritud (siin: skeem- keel, erijuhul nt skeem-XML [SKMXML]). • Konversioonitüüpe ikka palju (lähtekeel, SK, mudel). • Probleem: kuidas automatiseerida konverterite loomist.
Konverter1 LK1 (LK1, M1): SK LK2 Konverter2 (LK2, M2): . . . . . . Lahendus LK1 Parser1 Konverter K0 SK analüüsipuu Parser2 LK2 mudel . . . . . . M1’ M2’ . . . Parserite loomine on automatiseeritud: JavaCC/JJTree [JavaCC] [JJTree] Mudelivahetus lihtne (LK1, M1i), i = ...
Amadeus-fRED Analüüsipuud ehitava parseri loomine • Koostada LK grammatika • Koostada LK grammatika JavaCC/JJTree vormis, fail LK.jjt • Genereerida analüüsipuid ehitav parser: • jjtree LK.jjt tulemus: LK.jj • javacc LK.jj tulemus: LKParser.java • javac LKParser.java tulemus: LKParser.class Grammatika silumine: Amadeus-fRED toel. Selleks tuleb lisada LK uueks baaskeeleks.
Amadeus-fRED LK uueks baakseeleks BaseLanguageLK parse() sketchify() 4. Koostada uus klass vastava malli järgi. Esialgu ainult meetod parse(). Viimane rakendab meetodit LKParser.parse(). 5. Registreerida uus baaskeele nimi ülemklassis BaseLanguage. Saab ehitada ja vaadelda keele LK konkreetsete tekstide analüüsipuid, siluda grammatikat.
class A{ int meetod(int n, int m){ n = n/2; m = m*3; int x; if(n > m) x = n - m; else x = m - n; return x; } } Lähtekeel: JavaCC, JavaCC Java Analüüsipuu demo 6. Realiseerida ka meetod sketchify() vastava malli järgi. Saab konverteerida.
Lähtekeel: Dialog- [DLG] ((63, a29, infotelefon)) ((ühtlustas Andriela Rääbis 18.11.2003)) ((kutsung)) | RIE: KUTSUNG | V: `Estmar=`info, | RIJ: KUTSUNGI VASTUVÕTMINE | | RY: TUTVUSTUS | `Leenu=kuuleb | RY: TUTVUSTUS | tere | RIE: TERVITUS | H: tere. | RIJ: VASTUTERVITUS | `öelge palun kas te rongi`aegasid ka oskate `öelda. | KYE: SULETUD KAS | (0.5) V: ei, `rongide sõiduplaani meil ei `ole, | KYJ: EI | aga saan anda teile `rongijaama infonumbri. | DIE: PAKKUMINE | H: jaa | DIJ: NÕUSTUMINE | ja see oleks | DIE: SOOV | (.) V: see on kolm seitse kolm, (.) kaks kaks null. | DIJ: INFO ANDMINE | H: aitäh? | RIE: TÄNAN | V: palun | RIJ: PALUN |
Lähtekeel: Dialog- [DLG] ((63, a29, infotelefon)) ((ühtlustas Andriela Rääbis 18.11.2003)) ((kutsung)) | RIE: KUTSUNG | V: `Estmar=`info, | RIJ: KUTSUNGI VASTUVÕTMINE | | RY: TUTVUSTUS | `Leenu=kuuleb | RY: TUTVUSTUS | tere | RIE: TERVITUS | H: tere. | RIJ: VASTUTERVITUS | `öelge palun kas te rongi`aegasid ka oskate `öelda. | KYE: SULETUD KAS | (0.5) V: ei, `rongide sõiduplaani meil ei `ole, | KYJ: EI | aga saan anda teile `rongijaama infonumbri. | DIE: PAKKUMINE | H: jaa | DIJ: NÕUSTUMINE | ja see oleks | DIE: SOOV | lausung märgend märgendiTäpsustus (.) V: see on kolm seitse kolm, (.) kaks kaks null. | DIJ: INFO ANDMINE | H: aitäh? | RIE: TÄNAN | V: palun | RIJ: PALUN |
Lähtekeel: Dialog -: "((63, a29, infotelefon))"|-: -| -: "((ühtlustas Andriela Rääbis 18.11.2003))"|-: -| "((kutsung)) "| RIE: KUTSUNG | V:" `Estmar=`info, "| RIJ: KUTSUNGI VASTUVÕTMINE | | RY: TUTVUSTUS | " `Leenu=kuuleb "| RY: TUTVUSTUS | " tere "| RIE: TERVITUS | H:" tere. "| RIJ: VASTUTERVITUS | " `öelge palun kas te rongi`aegasid ka oskate `öelda. "| KYE: SULETUD KAS | -: " (0.5) "|-: -| V:" ei, `rongide sõiduplaani meil ei `ole, "| KYJ: EI | "aga saan anda teile `rongijaama infonumbri. “| DIE: PAKKUMINE | H:" jaa "| DIJ: NÕUSTUMINE | " ja see oleks "| DIE: SOOV | lausung märgend märgendiTäpsustus -: " (.) "|-: -| V:" see on kolm seitse kolm, (.) kaks kaks null. “| DIJ: INFO ANDMINE | H:" aitäh? "| RIE: TÄNAN | V:" palun "| RIJ: PALUN |
Keele Dialog grammatika s ::= dialoog dialoog ::= (kõnevoor)+ kõnevoor ::= kõneleja ":" (lausungJaMärgendid)+ kõneleja() ::= IDENTIFIKAATOR lausungJaMärgendid ::= lausung (märgend)+ lausung() ::= "\"“ ((~["\""]))* "\"" // jutumärkideta sõne jutumärkides märgend ::= "|" märgendiTüüp ":" märgendiTäpsustus "|" märgendiTüüp ::= IDENTIFIKAATOR märgendiTäpsustus ::= (IDENTIFIKAATOR)+ Dialog.jjt ( > Dialog.jj > DialogParser.java) BaseLanguageDialog.java BaseLanguage.java Dialog demo
Kokkuvõtteks • Koostada keele Dialog grammatika • Koostada keele Dialog grammatika JavaCC/JJTree vormis • Genereerida analüüsipuid ehitav parser • BaseLanguageDialog.java ( meetod parse()) • BaseLanguage.java Parsimisvõimalus, grammatika silumine 6. BaseLanguageDialog.javameetod sketchify() * Koostada mudel Keele Dialog tekstide konverteerimine Lõviosa ajast: grammatika – ca 2 tööpäeva. Konverteerimisvõimalus saadakse grammatika tegemise kiirusega. 7. Pöördkonverter (tekstualiseerija) – hinnang: ca 2 tundi 8. Uus vaade – hinnang: ca 2 tööpäeva