Friday, November 6, 2009

C like JIT interpreter in Delphi

Are you in need of a freeware fast C like JIT interpreter?
Look no further I present to you BeRoScript, it's created by Benjamin Rosseaux a.K.a. "Bero" and can be downloaded from this link, if link is broken then contact Benjamin directly, I'm sure he will send it to you.
Here's a taste of BeRoScript language from demo files provided with interpreter
File: prime.bs(prime number)
int main() {
 long i,k,gefunden=0;
 for (i=2;i<=2048;i++) {
  byte prime=1;
  for (k=2;k<=i;k++) {
   if (i!=k) {
    if ((i%k)==0) {
     prime=0;
     break;
    }
   }
  }
  if (prime) {
   printf(i," ist eine Primezahl\r\n");  
   gefunden++;
  }
 } 
 printf(gefunden," Primezahlen im Zahlenbereich 2 bis 2048 gefunden!\r\n");  
}
File: oop.bs(object oriented programming)
enum Geschlechter { maennlich=0, weiblich }
object Mensch {
 string Name;
 int Alter;
 int Geschlecht;
};
object Ort {
 string Adresse;
};
object Schule(Ort) {
 string Form;
};
object Lehrer(Mensch,Schule) {
 string Fach;
};
object Schueler(Mensch,Schule) {
 bool IstGut;
};
int Mensch::EineZahl() {
 return 1234;
}
void Mensch::printdata() {
 printf("Name: ",Name,"\n");
 printf("Alter: ",Alter,"\n");
 printf("Geschlecht: ",Geschlecht?"weiblich":"maennlich","\n");
}
void Ort::printdata() {
 printf("Adresse: ",this->Adresse,"\n");
}
void Schule::printdata() {
 inherited();
 printf("Schulform: ",this->Form,"\n");
}
void Lehrer::printdata() {
 inherited Mensch();
 inherited Schule();
 printf("Unterrichtet: ",Fach,"\n");
 printf(inherited Mensch.EineZahl()*2,"\n\n");
}
void Schueler::printdata() {
 inherited Mensch.printdata();
 inherited Schule.printdata();
 printf("Status: ",this->IstGut?"liefert gute Leistungen":"ist super faul","\n");
 printf(inherited EineZahl(),"\n\n");
}
void main(){
 Lehrer HerrMustermann;
 Schueler Max;
 HerrMustermann.Name="Tom Mustermann";
 HerrMustermann.Alter=38;
 HerrMustermann.Geschlecht=maennlich;
 HerrMustermann.Adresse="Musterstrasse 123";
 HerrMustermann.Form="Gesamtschule";
 HerrMustermann.Fach="Mathematik";
 Max.Name="Max Schmidt";
 Max.Alter=18;
 Max.Geschlecht=maennlich;
 Max.Adresse="Musterstrasse 123";
 Max.Form="Gesamtschule";
 Max.IstGut=true;
 HerrMustermann.printdata();
 Max.printdata();
} 
File: Zahlenrate.bs(pay rates)
int main() {
 printf("BeRoScript Zahlenraten - Version 1.00\n");
 printf("Copyright (C) 2004, Benjamin Rosseaux\n\n");
 printf("Gib deinen Namen ein: ");
 string name=trim(readstring());
 if(length(name)==0)name="Unbekannter";
 readln();
 printf("\nAlso ",name,", bist du fuers Spiel bereit? ;)\n\n");
 nochmal:
 int meinezahl,zahl=1000,versuche=10;
 bool gewonnen=false;
 unsigned char taste;
 meinezahl=round(random()*100);
 printf("Du muss nun eine Zahl zwischen 0 und 100 erraten! (-1=Ende)\n");
 printf("Du hast 10 Versuche!\n\n");
 while((meinezahl!=zahl)&&(zahl>=0)&&(versuche>0)){
  printf("Gebe deine Zahl ein: ");
  zahl=readint();
  if(versuche>1){
   if(zahl<0){
    break;
   }else if(meinezahlzahl){
    printf("Meine Zahl ist groesser\n");
   }else{
    printf("\nRichtig, ",name,"! Meine Zahl war ",zahl,"\n\n");
    gewonnen=true;
    break;
   }
  }
  if(--versuche){
   if(versuche==1){
    printf(name,"! Du hast nur noch einen einizigen Versuch!\n\n");
   }else{
    printf("Du hast noch ",versuche," Versuche!\n\n");
   }
  }
 }
 if(!gewonnen){
  printf("\nDu hast leider verloren! Meine Zahl war ",meinezahl,"\n\n");
 }
 readln();
 falscheeingabe:
 printf("Nochmal? (j/n)");
 taste=readchar();
 switch(taste){
  case 'j':case 'J':printf("\nOh, yeah ;)\n\n");readln();goto nochmal;
  case 'n':case 'N':printf("\nSchade, ja denn, bis bald, ",name,"! ;)\n");readln();break;
  default:printf("\nUps, falsche Eingabe ;)\n\n");readln();goto falscheeingabe;
 }
}

No comments:

Post a Comment

Blogroll(General programming and Delphi feeds)