====== 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.