Moar cleanup

This commit is contained in:
weckyy702
2021-01-17 23:37:07 +01:00
parent d2f157a523
commit 33dfcc9108
4 changed files with 319 additions and 313 deletions

View File

@@ -81,19 +81,19 @@ class if_instruction(Iinstruction):
return max(self._getblkwidth(), self.get_truewidth() + self.get_falsewidth()) return max(self._getblkwidth(), self.get_truewidth() + self.get_falsewidth())
def get_truewidth(self) -> float: def get_truewidth(self) -> float:
w = 0.0 w = 50
for inst in self.true_case: for inst in self.true_case:
w += inst.getblkwidth() w = max(w, inst.getblkwidth())
return w return w
def get_falsewidth(self) -> float: def get_falsewidth(self) -> float:
w = 0.0 w = 50
if self.false_case: if self.false_case:
for inst in self.false_case: for inst in self.false_case:
w += inst.getblkwidth() w = max(w, inst.getblkwidth())
return w return w
@@ -161,9 +161,9 @@ class while_instruction_front(Iinstruction):
return children_sz return children_sz
def get_children_width(self) -> float: def get_children_width(self) -> float:
w = 0.0 w = 50.0
for inst in self.child_instructions: for inst in self.child_instructions:
w += inst.getblkheight() w = max(w, inst.getblkheight())
return w return w
def getblkheight(self) -> float: def getblkheight(self) -> float:

View File

@@ -0,0 +1,24 @@
from typing import Iterable, List
from draw.Iinstruction import Iinstruction
class Function_scope(Iterable):
def __init__(self, child_instructions: List[Iinstruction], name: str, return_type: str, args: List[str]) -> None:
self.contents = child_instructions
self.name = name
self.return_type = return_type
self.args = args
def get_height(self) -> int:
h = 0.0
for inst in self.contents:
h += inst.getblkheight()
return int(h)
def get_width(self) -> int:
w = 200.0
for inst in self.contents:
w = max(w, inst.getblkwidth())
return int(w)
def __iter__(self):
return self.contents.__iter__()

View File

@@ -4,6 +4,7 @@ from typing import Dict, List, Match, Tuple, Union
from errors.custom import InterpreterException, JavaSyntaxError, ScopeNotFoundException from errors.custom import InterpreterException, JavaSyntaxError, ScopeNotFoundException
from draw.Iinstruction import * from draw.Iinstruction import *
from interpreter.Function_scope import Function_scope
logging.warning("""Because the Interpreter is still WIP, some Java language features are not supported. These include: logging.warning("""Because the Interpreter is still WIP, some Java language features are not supported. These include:
*foreach loops (will throw JavaSyntaxError) *foreach loops (will throw JavaSyntaxError)
@@ -12,28 +13,6 @@ logging.warning("""Because the Interpreter is still WIP, some Java language feat
*Generics *Generics
Please remove these features from the source code as they will result in incorrect behaviour""") Please remove these features from the source code as they will result in incorrect behaviour""")
class Function_scope(Iterable):
def __init__(self, child_instructions: List[Iinstruction], name: str, return_type: str, args: List[str]) -> None:
self.contents = child_instructions
self.name = name
self.return_type = return_type
self.args = args
def get_height(self) -> int:
h = 0.0
for inst in self.contents:
h += inst.getblkheight()
return int(h)
def get_width(self) -> int:
w = 200.0
for inst in self.contents:
w = max(w, inst.getblkwidth())
return int(w)
def __iter__(self):
return self.contents.__iter__()
class JavaInterpreter: class JavaInterpreter:
def __init__(self, filepath: str) -> None: def __init__(self, filepath: str) -> None:

View File

@@ -1,331 +1,334 @@
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) // import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
//Comment that the interpreter may never know of // //Comment that the interpreter may never know of
public class Rover extends Actor // public class Rover extends Actor
{ // {
private Display anzeige; // private Display anzeige;
/** // /**
* this function is to be implemented by the user // * this function is to be implemented by the user
* depending on the needed actions // * depending on the needed actions
*/ // */
public Display getDisplay() // public Display getDisplay()
{ // {
return anzeige; // return anzeige;
} // }
public void act() // public void act()
{ // {
S66Nr3(7); // S66Nr3(7);
} // }
private void fahreUmHuegel(String richtung) // private void fahreUmHuegel(String richtung)
{ // {
String pri; // String pri;
String sec; // String sec;
if(richtung.equals("Hoch")) { // if(richtung.equals("Hoch")) {
pri = "links"; // pri = "links";
sec = "rechts"; // sec = "rechts";
} else if (richtung.equals("Runter")) { // } else if (richtung.equals("Runter")) {
pri = "rechts"; // pri = "rechts";
sec = "links"; // sec = "links";
} else { // } else {
nachricht("JUNGE DU SPAST!"); // nachricht("JUNGE DU SPAST!");
return; // return;
} // }
drehe(pri); // drehe(pri);
fahre(); // fahre();
drehe(sec); // drehe(sec);
fahre(); // fahre();
fahre(); // fahre();
drehe(sec); // drehe(sec);
fahre(); // fahre();
drehe(pri); // drehe(pri);
} // }
private void fahreBisHuegel() // private void fahreBisHuegel()
{ // {
while(!huegelVorhanden("vorne")) // while(!huegelVorhanden("vorne"))
{ // {
fahre(); // fahre();
} // }
} // }
private void fahreZeileDreheHoch() // private void fahreZeileDreheHoch()
{ // {
fahreBisHuegel(); // fahreBisHuegel();
fahreUmHuegel("Hoch"); // fahreUmHuegel("Hoch");
fahreBisHuegel(); // fahreBisHuegel();
drehe("um"); // drehe("um");
fahreBisHuegel(); // fahreBisHuegel();
fahreUmHuegel("Runter"); // fahreUmHuegel("Runter");
fahreBisHuegel(); // fahreBisHuegel();
drehe("rechts"); // drehe("rechts");
fahre(); // fahre();
drehe("rechts"); // drehe("rechts");
} // }
private void fahreZeileDreheRunter(boolean geheInNächsteZeile) // private void fahreZeileDreheRunter(boolean geheInNächsteZeile)
{ // {
fahreBisHuegel(); // fahreBisHuegel();
fahreUmHuegel("Runter"); // fahreUmHuegel("Runter");
fahreBisHuegel(); // fahreBisHuegel();
drehe("um"); // drehe("um");
fahreBisHuegel(); // fahreBisHuegel();
fahreUmHuegel("Hoch"); // fahreUmHuegel("Hoch");
fahreBisHuegel(); // fahreBisHuegel();
if(geheInNächsteZeile) { // if(geheInNächsteZeile) {
drehe("rechts"); // drehe("rechts");
fahre(); // fahre();
drehe("rechts"); // drehe("rechts");
} else { // } else {
drehe("um"); // drehe("um");
} // }
} // }
private void S66Nr3(int anzahlZeilen) // private void S66Nr3(int anzahlZeilen)
{ // {
if(anzahlZeilen < 3) { // if(anzahlZeilen < 3) {
nachricht("Ich muss mindestens drei Zeilen fahren! :("); // nachricht("Ich muss mindestens drei Zeilen fahren! :(");
return; // return;
} // }
int i = 1; // int i = 1;
fahreZeileDreheHoch(); // fahreZeileDreheHoch();
for(; i < anzahlZeilen-1; i++) { // for(; i < anzahlZeilen-1; i++) {
fahreZeileDreheRunter(true); // fahreZeileDreheRunter(true);
} // }
fahreZeileDreheRunter(false); // fahreZeileDreheRunter(false);
} // }
/** // /**
* Der Rover bewegt sich ein Feld in Fahrtrichtung weiter. // * Der Rover bewegt sich ein Feld in Fahrtrichtung weiter.
* Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden, // * Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden,
* dann erscheint eine entsprechende Meldung auf dem Display. // * dann erscheint eine entsprechende Meldung auf dem Display.
*/ // */
public void fahre() // public void fahre()
{ // {
int posX = getX(); // int posX = getX();
int posY = getY(); // int posY = getY();
if(huegelVorhanden("vorne")) // if(huegelVorhanden("vorne"))
{ // {
nachricht("Zu steil!"); // nachricht("Zu steil!");
} // }
else if(getRotation()==270 && getY()==1) // else if(getRotation()==270 && getY()==1)
{ // {
nachricht("Ich kann mich nicht bewegen"); // nachricht("Ich kann mich nicht bewegen");
} // }
else // else
{ // {
move(1); // move(1);
Greenfoot.delay(1); // Greenfoot.delay(1);
} // }
if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne")) // if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne"))
{ // {
nachricht("Ich kann mich nicht bewegen"); // nachricht("Ich kann mich nicht bewegen");
} // }
} // }
/** // /**
* Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung (ᅵlinksᅵ oder ᅵrechtsᅵ) ᅵbergeben wurde. // * Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung (ᅵlinksᅵ oder ᅵrechtsᅵ) ᅵbergeben wurde.
* Sollte ein anderer Text (String) als "rechts" oder "links" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display. // * Sollte ein anderer Text (String) als "rechts" oder "links" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/ // */
public void drehe(String richtung) // public void drehe(String richtung)
{ // {
if(richtung.equals("rechts")){ // if(richtung.equals("rechts")){
setRotation(getRotation()+90); // setRotation(getRotation()+90);
}else if(richtung.equals("links")){ // }else if(richtung.equals("links")){
setRotation(getRotation()-90); // setRotation(getRotation()-90);
} else if(richtung.equals("um")) { // } else if(richtung.equals("um")) {
setRotation(getRotation()+180); // setRotation(getRotation()+180);
}else { // }else {
nachricht("Keinen Korrekte Richtung gegeben!"); // nachricht("Keinen Korrekte Richtung gegeben!");
} // }
} // }
/** // /**
* Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Klasse Gestein befindet. // * Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Klasse Gestein befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display. // * Eine entsprechende Meldung erscheint auch auf dem Display.
*/ // */
public boolean gesteinVorhanden() // public boolean gesteinVorhanden()
{ // {
if(getOneIntersectingObject(Gestein.class)!=null) // if(getOneIntersectingObject(Gestein.class)!=null)
{ // {
nachricht("Gestein gefunden!"); // nachricht("Gestein gefunden!");
return true; // return true;
} // }
return false; // return false;
} // }
/** // /**
* Der Rover ᅵberprᅵft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet. // * Der Rover ᅵberprᅵft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet.
* Das Ergebnis wird auf dem Display angezeigt. // * Das Ergebnis wird auf dem Display angezeigt.
* Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display. // * Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/ // */
public boolean huegelVorhanden(String richtung) // public boolean huegelVorhanden(String richtung)
{ // {
int rot = getRotation(); // int rot = getRotation();
if (richtung=="vorne" && rot==0 || richtung=="rechts" && rot==270 || richtung=="links" && rot==90) // if (richtung=="vorne" && rot==0 || richtung=="rechts" && rot==270 || richtung=="links" && rot==90)
{ // {
if(getOneObjectAtOffset(1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(1,0,Huegel.class)).getSteigung() >30) // if(getOneObjectAtOffset(1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(1,0,Huegel.class)).getSteigung() >30)
{ // {
return true; // return true;
} // }
} // }
if (richtung=="vorne" && rot==180 || richtung=="rechts" && rot==90 || richtung=="links" && rot==270) // if (richtung=="vorne" && rot==180 || richtung=="rechts" && rot==90 || richtung=="links" && rot==270)
{ // {
if(getOneObjectAtOffset(-1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung() >30) // if(getOneObjectAtOffset(-1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung() >30)
{ // {
return true; // return true;
} // }
} // }
if (richtung=="vorne" && rot==90 || richtung=="rechts" && rot==0 || richtung=="links" && rot==180) // if (richtung=="vorne" && rot==90 || richtung=="rechts" && rot==0 || richtung=="links" && rot==180)
{ // {
if(getOneObjectAtOffset(0,1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung() >30) // if(getOneObjectAtOffset(0,1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung() >30)
{ // {
return true; // return true;
} // }
} // }
if (richtung=="vorne" && rot==270 || richtung=="rechts" && rot==180 || richtung=="links" && rot==0) // if (richtung=="vorne" && rot==270 || richtung=="rechts" && rot==180 || richtung=="links" && rot==0)
{ // {
if(getOneObjectAtOffset(0,-1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung() >30) // if(getOneObjectAtOffset(0,-1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung() >30)
{ // {
return true; // return true;
} // }
} // }
if(richtung!="vorne" && richtung!="links" && richtung!="rechts") // if(richtung!="vorne" && richtung!="links" && richtung!="rechts")
{ // {
nachricht("Befehl nicht korrekt!"); // nachricht("Befehl nicht korrekt!");
} // }
return false; // return false;
} // }
/** // /**
* Der Rover ermittelt den Wassergehalt des Gesteins auf seiner Position und gibt diesen auf dem Display aus. // * Der Rover ermittelt den Wassergehalt des Gesteins auf seiner Position und gibt diesen auf dem Display aus.
* Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint eine entsprechende Meldung auf dem Display. // * Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint eine entsprechende Meldung auf dem Display.
*/ // */
public void analysiereGestein() // public void analysiereGestein()
{ // {
if(gesteinVorhanden()) // if(gesteinVorhanden())
{ // {
nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%."); // nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%.");
Greenfoot.delay(1); // Greenfoot.delay(1);
removeTouching(Gestein.class); // removeTouching(Gestein.class);
} // }
else // else
{ // {
nachricht("Hier ist kein Gestein"); // nachricht("Hier ist kein Gestein");
} // }
} // }
/** // /**
* Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position. // * Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position.
*/ // */
public void setzeMarke() // public void setzeMarke()
{ // {
getWorld().addObject(new Marke(), getX(), getY()); // getWorld().addObject(new Marke(), getX(), getY());
} // }
/** // /**
* *Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Marke befindet. // * *Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Marke befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display. // * Eine entsprechende Meldung erscheint auch auf dem Display.
*/ // */
public boolean markeVorhanden() // public boolean markeVorhanden()
{ // {
if(getOneIntersectingObject(Marke.class)!=null) // if(getOneIntersectingObject(Marke.class)!=null)
{ // {
return true; // return true;
} // }
return false; // return false;
} // }
public void entferneMarke() // public void entferneMarke()
{ // {
if(markeVorhanden()) // if(markeVorhanden())
{ // {
removeTouching(Marke.class); // removeTouching(Marke.class);
} // }
} // }
private void nachricht(String pText) // private void nachricht(String pText)
{ // {
if(anzeige!=null) // if(anzeige!=null)
{ // {
anzeige.anzeigen(pText); // anzeige.anzeigen(pText);
Greenfoot.delay(1); // Greenfoot.delay(1);
anzeige.loeschen(); // anzeige.loeschen();
} // }
} // }
private void displayAusschalten() // private void displayAusschalten()
{ // {
getWorld().removeObject(anzeige); // getWorld().removeObject(anzeige);
} // }
protected void addedToWorld(World world) // protected void addedToWorld(World world)
{ // {
setImage("images/rover.png"); // setImage("images/rover.png");
world = getWorld(); // world = getWorld();
anzeige = new Display(); // anzeige = new Display();
anzeige.setImage("images/nachricht.png"); // anzeige.setImage("images/nachricht.png");
world.addObject(anzeige, 7, 0); // world.addObject(anzeige, 7, 0);
if(getY()==0) // if(getY()==0)
{ // {
setLocation(getX(),1); // setLocation(getX(),1);
} // }
anzeige.anzeigen("Ich bin bereit"); // anzeige.anzeigen("Ich bin bereit");
} // }
class Display extends Actor // class Display extends Actor
{ // {
GreenfootImage bild; // GreenfootImage bild;
public Display() // public Display()
{ // {
bild = getImage(); // bild = getImage();
} // }
public void act() // public void act()
{ // {
} // }
public void anzeigen(String pText) // public void anzeigen(String pText)
{ // {
loeschen(); // loeschen();
getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10); // getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10);
} // }
public void loeschen() // public void loeschen()
{ // {
getImage().clear(); // getImage().clear();
setImage("images/nachricht.png"); // setImage("images/nachricht.png");
} // }
} // }
public class Direction { // public class Direction {
Direction(int val){ // Direction(int val){
this.value = val; // this.value = val;
} // }
final int value; // final int value;
}; // };
} // }
void function() {
print(12);
}