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.