From 33dfcc91080339b919c48b9451080884569a0b13 Mon Sep 17 00:00:00 2001 From: weckyy702 Date: Sun, 17 Jan 2021 23:37:07 +0100 Subject: [PATCH] Moar cleanup --- draw/Iinstruction.py | 12 +- interpreter/Function_scope.py | 24 ++ interpreter/interpret_source.py | 23 +- res/input/input.java | 573 ++++++++++++++++---------------- 4 files changed, 319 insertions(+), 313 deletions(-) create mode 100644 interpreter/Function_scope.py diff --git a/draw/Iinstruction.py b/draw/Iinstruction.py index 40e1684..a4a13f0 100644 --- a/draw/Iinstruction.py +++ b/draw/Iinstruction.py @@ -81,19 +81,19 @@ class if_instruction(Iinstruction): return max(self._getblkwidth(), self.get_truewidth() + self.get_falsewidth()) def get_truewidth(self) -> float: - w = 0.0 + w = 50 for inst in self.true_case: - w += inst.getblkwidth() + w = max(w, inst.getblkwidth()) return w def get_falsewidth(self) -> float: - w = 0.0 + w = 50 if self.false_case: for inst in self.false_case: - w += inst.getblkwidth() + w = max(w, inst.getblkwidth()) return w @@ -161,9 +161,9 @@ class while_instruction_front(Iinstruction): return children_sz def get_children_width(self) -> float: - w = 0.0 + w = 50.0 for inst in self.child_instructions: - w += inst.getblkheight() + w = max(w, inst.getblkheight()) return w def getblkheight(self) -> float: diff --git a/interpreter/Function_scope.py b/interpreter/Function_scope.py new file mode 100644 index 0000000..e9cc273 --- /dev/null +++ b/interpreter/Function_scope.py @@ -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__() \ No newline at end of file diff --git a/interpreter/interpret_source.py b/interpreter/interpret_source.py index e0516f8..62426fb 100644 --- a/interpreter/interpret_source.py +++ b/interpreter/interpret_source.py @@ -4,6 +4,7 @@ from typing import Dict, List, Match, Tuple, Union from errors.custom import InterpreterException, JavaSyntaxError, ScopeNotFoundException 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: *foreach loops (will throw JavaSyntaxError) @@ -12,28 +13,6 @@ logging.warning("""Because the Interpreter is still WIP, some Java language feat *Generics 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: def __init__(self, filepath: str) -> None: diff --git a/res/input/input.java b/res/input/input.java index 6004bbe..7cb294b 100644 --- a/res/input/input.java +++ b/res/input/input.java @@ -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 -{ - private Display anzeige; +// public class Rover extends Actor +// { +// private Display anzeige; - /** - * this function is to be implemented by the user - * depending on the needed actions - */ +// /** +// * this function is to be implemented by the user +// * depending on the needed actions +// */ - public Display getDisplay() - { - return anzeige; - } +// public Display getDisplay() +// { +// return anzeige; +// } - public void act() - { - S66Nr3(7); - } +// public void act() +// { +// S66Nr3(7); +// } - private void fahreUmHuegel(String richtung) - { - String pri; - String sec; - if(richtung.equals("Hoch")) { - pri = "links"; - sec = "rechts"; - } else if (richtung.equals("Runter")) { - pri = "rechts"; - sec = "links"; - } else { - nachricht("JUNGE DU SPAST!"); - return; - } - drehe(pri); - fahre(); - drehe(sec); - fahre(); - fahre(); - drehe(sec); - fahre(); - drehe(pri); - } +// private void fahreUmHuegel(String richtung) +// { +// String pri; +// String sec; +// if(richtung.equals("Hoch")) { +// pri = "links"; +// sec = "rechts"; +// } else if (richtung.equals("Runter")) { +// pri = "rechts"; +// sec = "links"; +// } else { +// nachricht("JUNGE DU SPAST!"); +// return; +// } +// drehe(pri); +// fahre(); +// drehe(sec); +// fahre(); +// fahre(); +// drehe(sec); +// fahre(); +// drehe(pri); +// } - private void fahreBisHuegel() - { - while(!huegelVorhanden("vorne")) - { - fahre(); - } - } +// private void fahreBisHuegel() +// { +// while(!huegelVorhanden("vorne")) +// { +// fahre(); +// } +// } - private void fahreZeileDreheHoch() - { - fahreBisHuegel(); - fahreUmHuegel("Hoch"); - fahreBisHuegel(); - drehe("um"); +// private void fahreZeileDreheHoch() +// { +// fahreBisHuegel(); +// fahreUmHuegel("Hoch"); +// fahreBisHuegel(); +// drehe("um"); - fahreBisHuegel(); - fahreUmHuegel("Runter"); - fahreBisHuegel(); - drehe("rechts"); - fahre(); - drehe("rechts"); - } +// fahreBisHuegel(); +// fahreUmHuegel("Runter"); +// fahreBisHuegel(); +// drehe("rechts"); +// fahre(); +// drehe("rechts"); +// } - private void fahreZeileDreheRunter(boolean geheInNächsteZeile) - { - fahreBisHuegel(); - fahreUmHuegel("Runter"); - fahreBisHuegel(); - drehe("um"); +// private void fahreZeileDreheRunter(boolean geheInNächsteZeile) +// { +// fahreBisHuegel(); +// fahreUmHuegel("Runter"); +// fahreBisHuegel(); +// drehe("um"); - fahreBisHuegel(); - fahreUmHuegel("Hoch"); - fahreBisHuegel(); - if(geheInNächsteZeile) { - drehe("rechts"); - fahre(); - drehe("rechts"); - } else { - drehe("um"); - } - } +// fahreBisHuegel(); +// fahreUmHuegel("Hoch"); +// fahreBisHuegel(); +// if(geheInNächsteZeile) { +// drehe("rechts"); +// fahre(); +// drehe("rechts"); +// } else { +// drehe("um"); +// } +// } - private void S66Nr3(int anzahlZeilen) - { - if(anzahlZeilen < 3) { - nachricht("Ich muss mindestens drei Zeilen fahren! :("); - return; - } - int i = 1; - fahreZeileDreheHoch(); - for(; i < anzahlZeilen-1; i++) { - fahreZeileDreheRunter(true); - } - fahreZeileDreheRunter(false); - } +// private void S66Nr3(int anzahlZeilen) +// { +// if(anzahlZeilen < 3) { +// nachricht("Ich muss mindestens drei Zeilen fahren! :("); +// return; +// } +// int i = 1; +// fahreZeileDreheHoch(); +// for(; i < anzahlZeilen-1; i++) { +// fahreZeileDreheRunter(true); +// } +// fahreZeileDreheRunter(false); +// } - /** - * 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, - * dann erscheint eine entsprechende Meldung auf dem Display. - */ - public void fahre() - { - int posX = getX(); - int posY = getY(); +// /** +// * 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, +// * dann erscheint eine entsprechende Meldung auf dem Display. +// */ +// public void fahre() +// { +// int posX = getX(); +// int posY = getY(); - if(huegelVorhanden("vorne")) - { - nachricht("Zu steil!"); - } - else if(getRotation()==270 && getY()==1) - { - nachricht("Ich kann mich nicht bewegen"); - } - else - { - move(1); - Greenfoot.delay(1); - } +// if(huegelVorhanden("vorne")) +// { +// nachricht("Zu steil!"); +// } +// else if(getRotation()==270 && getY()==1) +// { +// nachricht("Ich kann mich nicht bewegen"); +// } +// else +// { +// move(1); +// Greenfoot.delay(1); +// } - if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne")) - { - nachricht("Ich kann mich nicht bewegen"); - } - } +// if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne")) +// { +// nachricht("Ich kann mich nicht bewegen"); +// } +// } - /** - * 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. - */ - public void drehe(String richtung) - { - if(richtung.equals("rechts")){ - setRotation(getRotation()+90); - }else if(richtung.equals("links")){ - setRotation(getRotation()-90); - } else if(richtung.equals("um")) { - setRotation(getRotation()+180); - }else { - nachricht("Keinen Korrekte Richtung gegeben!"); - } - } +// /** +// * 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. +// */ +// public void drehe(String richtung) +// { +// if(richtung.equals("rechts")){ +// setRotation(getRotation()+90); +// }else if(richtung.equals("links")){ +// setRotation(getRotation()-90); +// } else if(richtung.equals("um")) { +// setRotation(getRotation()+180); +// }else { +// 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. - * Eine entsprechende Meldung erscheint auch auf dem Display. - */ - public boolean gesteinVorhanden() - { - if(getOneIntersectingObject(Gestein.class)!=null) - { - nachricht("Gestein gefunden!"); - return true; +// /** +// * 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. +// */ +// public boolean gesteinVorhanden() +// { +// if(getOneIntersectingObject(Gestein.class)!=null) +// { +// nachricht("Gestein gefunden!"); +// return true; - } +// } - return false; - } +// return false; +// } - /** - * 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. - * 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) - { - int rot = getRotation(); +// /** +// * 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. +// * 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) +// { +// int rot = getRotation(); - 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) - { - return true; - } - } +// 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) +// { +// return true; +// } +// } - 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) - { - return true; - } - } +// 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) +// { +// return true; +// } +// } - 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) - { - return true; - } +// 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) +// { +// return true; +// } - } +// } - 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) - { - return true; - } +// 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) +// { +// return true; +// } - } +// } - if(richtung!="vorne" && richtung!="links" && richtung!="rechts") - { - nachricht("Befehl nicht korrekt!"); - } +// if(richtung!="vorne" && richtung!="links" && richtung!="rechts") +// { +// 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. - * Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint eine entsprechende Meldung auf dem Display. - */ - public void analysiereGestein() - { - if(gesteinVorhanden()) - { - nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%."); - Greenfoot.delay(1); - removeTouching(Gestein.class); - } - else - { - nachricht("Hier ist kein Gestein"); - } - } +// /** +// * 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. +// */ +// public void analysiereGestein() +// { +// if(gesteinVorhanden()) +// { +// nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%."); +// Greenfoot.delay(1); +// removeTouching(Gestein.class); +// } +// else +// { +// nachricht("Hier ist kein Gestein"); +// } +// } - /** - * Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position. - */ - public void setzeMarke() - { - getWorld().addObject(new Marke(), getX(), getY()); - } +// /** +// * Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position. +// */ +// public void setzeMarke() +// { +// 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. - * Eine entsprechende Meldung erscheint auch auf dem Display. - */ - public boolean markeVorhanden() - { - if(getOneIntersectingObject(Marke.class)!=null) - { - return true; - } +// /** +// * *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. +// */ +// public boolean markeVorhanden() +// { +// if(getOneIntersectingObject(Marke.class)!=null) +// { +// return true; +// } - return false; - } +// return false; +// } - public void entferneMarke() - { - if(markeVorhanden()) - { - removeTouching(Marke.class); - } - } +// public void entferneMarke() +// { +// if(markeVorhanden()) +// { +// removeTouching(Marke.class); +// } +// } - private void nachricht(String pText) - { - if(anzeige!=null) - { - anzeige.anzeigen(pText); - Greenfoot.delay(1); - anzeige.loeschen(); - } - } +// private void nachricht(String pText) +// { +// if(anzeige!=null) +// { +// anzeige.anzeigen(pText); +// Greenfoot.delay(1); +// anzeige.loeschen(); +// } +// } - private void displayAusschalten() - { - getWorld().removeObject(anzeige); +// private void displayAusschalten() +// { +// getWorld().removeObject(anzeige); - } +// } - protected void addedToWorld(World world) - { - setImage("images/rover.png"); - world = getWorld(); - anzeige = new Display(); - anzeige.setImage("images/nachricht.png"); - world.addObject(anzeige, 7, 0); - if(getY()==0) - { - setLocation(getX(),1); - } - anzeige.anzeigen("Ich bin bereit"); - } +// protected void addedToWorld(World world) +// { +// setImage("images/rover.png"); +// world = getWorld(); +// anzeige = new Display(); +// anzeige.setImage("images/nachricht.png"); +// world.addObject(anzeige, 7, 0); +// if(getY()==0) +// { +// setLocation(getX(),1); +// } +// anzeige.anzeigen("Ich bin bereit"); +// } - class Display extends Actor - { - GreenfootImage bild; +// class Display extends Actor +// { +// GreenfootImage bild; - public Display() - { - bild = getImage(); - } +// public Display() +// { +// bild = getImage(); +// } - public void act() - { +// public void act() +// { - } +// } - public void anzeigen(String pText) - { - loeschen(); - getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10); +// public void anzeigen(String pText) +// { +// loeschen(); +// getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10); - } +// } - public void loeschen() - { - getImage().clear(); - setImage("images/nachricht.png"); - } +// public void loeschen() +// { +// getImage().clear(); +// setImage("images/nachricht.png"); +// } - } +// } - public class Direction { - Direction(int val){ - this.value = val; - } - final int value; - }; -} +// public class Direction { +// Direction(int val){ +// this.value = val; +// } +// final int value; +// }; +// } +void function() { + print(12); +} \ No newline at end of file