====== construct ====== Ein Konstrukt definiert ein nachgerüstetes Sprachmerkmal. Alles nachfolgende muss in der jeweiligen Funktion beschrieben werden. construct csv( stream & s ) { code translate( string s ) -> int { switch( s ) case "eins": return 1; case "zwei": return 2; case "drei": return 3; case "vier": return 4; default : return 0; } StringParser p(s); p.Accept( '{' ); value is string; result is int[]; if( p.Grab( value ) ) result += [translate(value)]; else { error( "Integer konnte nicht gelesen werden" ); return; } while p.Accept( '}' )! { if p.Accept(',')! { error( "',' or '}' expected" ); return; } if( p.GrabInt( value ) ) result += [translate(value)]; else { error( "Integer konnte nicht gelesen werden" ); return; } } emit result; } Führt zu: { il is int[]; il : csv { eins, zwei, drei, vier }; print il$; } Ergebnis: { 1, 2, 3, 4 } Das ganze sollte dann so ablaufen, dass Daten importiert werden können: image is bitmap : windowsbmp include "image.bmp"; Der Compiler sollte in der Lage sein, die zu kompilierende Datei als ein entsprechendes Konstrukt zu verstehen. gsys -construct imageviewer image.bmp Das Konstrukt 'imageviewer' bekommt "image.bmp" nun als Stream und kann es parsen, anschließend Routinen für einen Viewer emitten und das Bild includen.