[BuK] While/Loop-Programme-Compiler

[FoSAP] Formale Systeme, Automaten, Prozesse
[BuK] Berechenbarkeit und Komplexität
[MaLo] Mathematische Logik

While/Loop-Programme-Compiler

Beitragvon LonliLokli » 21.03.09 16:35

Hat vllt jemand so was gesehen / geschrieben? Da ich meine eigenene Funktionen noch nicht gut verefizieren kann, würde ich gern diese kompilieren und ausführen können.
LonliLokli
 
Beiträge: 337
Registriert: 06.07.07 19:28
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon fw » 21.03.09 17:15

Nehme eine beliebige Programmiersprache deiner Wahl (die WHILE Schleifen kennt) und implementiere dein Programm in dieser?
Benutzeravatar
fw
 
Beiträge: 1356
Registriert: 17.05.06 19:37
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Mathe

Beitragvon NeX » 21.03.09 18:17

fw hat geschrieben:Nehme eine beliebige Programmiersprache deiner Wahl (die WHILE Schleifen kennt) und implementiere dein Programm in dieser?


genauso macht es der Lehrstuhl im übrigen auch....
Don't think about....Just do it!
Benutzeravatar
NeX
 
Beiträge: 550
Registriert: 18.10.07 16:03
Wohnort: Mönchengladbach
Studiengang: Informatik (B.Sc.)
Studiert seit: WS 08/09
Anwendungsfach: BWL

Beitragvon LonliLokli » 21.03.09 18:40

fw hat geschrieben:Nehme eine beliebige Programmiersprache deiner Wahl (die WHILE Schleifen kennt) und implementiere dein Programm in dieser?

ja. das habe ich mir natürlich auch überlegt. Aber ein richtiger Compiler hätte mich auch gefreut. Aber wenn selbst der Lehrstuhl es auf diese Weise macht, dann schließe ich natürlich an :)
LonliLokli
 
Beiträge: 337
Registriert: 06.07.07 19:28
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon MartinL » 21.03.09 19:07

Naja mit Kenntnis von Regulären Ausdrücken, sollte sich sowas aber doch eigentlich auch recht schnell machen lassen.

Eigentlich musst du ja um das in C ans laufen zu bringen am Anfang eine Variablendeklaration einfügen und main. Wenn man Faul sein will definiert man am Anfang ein int array x[1000]

dann braucht man doch nicht viel mehr zu tun als
s/x(\d+)/x\[\1\]/
und s/:=/=/
und irgendwie noch s/DO/{/ und s/END/}/ oder sowas.

Man kann wahrscheinlich sogar mit minimalen Mehraufwand das Array von vorne mit Kommandozeilenparametern initialisieren, so dass man sogar eingaben an das Programm schicken kann *g*
MartinL
 
Beiträge: 531
Registriert: 23.01.07 20:48
Studiert seit: WS 06/07
Anwendungsfach: Mathe

Beitragvon O.D. » 22.03.09 00:51

Ganz so einfach duerfte es nicht sein. Denn wenn ich mich recht entsinne, war 0-1 = 0 und der Wertebereich nach oben unbeschraenkt. Wenn man also die Programme in dieser lustigen Syntax angeben will, sollte man sich einer Sprache bedienen, die es zulaesst Operatoren zu ueberladen. Ich denke, Haskell wuerde sich dafuer am besten eignen, da man hier den unendlichen Datentyp schon geschenkt bekommt. Man muss nur noch ne Instanz von Num anlegen, die alles von Integer erbt und noch das (-) modifiziert. Ungefaehr so:
Code: Alles auswählen
data RegInt = RegC Integer deriving (Show, Eq)

instance Num RegInt where
  (RegC x) + (RegC 1) = RegC (x+1)
  (RegC x) + (RegC y) = error "RAM does not support Addition."
  (RegC 0) - (RegC 1) = RegC 0
  (RegC x) - (RegC 1) = RegC (x-1)
  (RegC x) - (RegC y) = error "RAM does not support Subtraction."
  (RegC x) * (RegC y) = error "RAM does not support Multiplication."
  abs (RegC x) = RegC x
  signum (RegC x) = RegC (signum x)
  fromInteger i = RegC i

Dort wo jetzt error steht, kann man natuerlich noch seine eigene Definition einbringen, um die Programme kuerzer zu machen.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon MartinL » 22.03.09 01:53

Ob sich nun eine funktionale Programmiersprache am besten eignet um den Urtyp des iterativen Programmierschemas umzusetzen möchte ich doch mal bezweifeln ;)
MartinL
 
Beiträge: 531
Registriert: 23.01.07 20:48
Studiert seit: WS 06/07
Anwendungsfach: Mathe

Beitragvon cracki » 22.03.09 01:56

zuweisung

s/x(\d+) := x(\d+) (+|-) (\d+)/x[\1] = max(0, x[\2] \3 \4);/

bemerkung: ueberfluessige ; sind unschoen, aber okay.

while

s/while x(\d+) != 0 do/while (x[\1] != 0) {/
s/end/}/

fuer sowas wuerde man normalerweise einen richtigen tokenizer und parser bemuehen...
"I suppose if what you said had any merit it would occasion hostility." -- Kenny Tilton
Frische Vorlesungen! -- video.rwth-aachen.de
Benutzeravatar
cracki
 
Beiträge: 537
Registriert: 22.02.08 14:51
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: ?
Anwendungsfach: Medizin

Beitragvon O.D. » 22.03.09 02:59

MartinL hat geschrieben:Ob sich nun eine funktionale Programmiersprache am besten eignet um den Urtyp des iterativen Programmierschemas umzusetzen möchte ich doch mal bezweifeln ;)
Wieso? Sind die unterschiedlich maechtig? Du kannst sogar iterative Abschnitte mit do {} definieren. Ausserdem kannst Du das Programm natuerlich kodieren.

Ich sag nur ... "lazy evaluate me!" ;)
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon user » 22.03.09 06:34

Sehr gut erkannt, die sind in der Tat gleichmächtig. Aber denk an den polynomiellen Mehraufwand. Du hast nämlich nur endlich viel Zeit für dein Studium!

Nur weil's 'n Fetisch ist muss man ihn ja nicht überall ausleben. Ich versuch auch nich das Ding in eine Schulmädchenuniform zu zwängen.
user
 
Beiträge: 104
Registriert: 26.05.08 00:58
Wohnort: Tokyo

Beitragvon O.D. » 22.03.09 06:54

Neeeeee ... ich habe diese Schlulmaedchenuniformgeschichte auch noch nie nachvollziehen koennen, aber ich wohne ja auch nicht in Tokyo - da erfreut sich das zweifellos grosser Beliebtheit :)

Ich frage mich, ob es wohl Internetseiten gibt, die sich dem Anziehen von theoretischen Maschinen mit Schuluniformen verschrieben haben - es gibt doch so eine Pseudogesetzmaessigkeit, dass man sich keinen verrueckten Fetisch ausdenken kann, ohne dass es ihn irgendwo (im Web) gibt. Sowas wie www.register-mit-faltenrock.com.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon LonliLokli » 22.03.09 11:31

O.D. hat geschrieben:Ganz so einfach duerfte es nicht sein. Denn wenn ich mich recht entsinne, war 0-1 = 0

Nein. Ist es nicht. 0-1 = -1
Ich mache jetzt while- Programm auf diese Weise
Code: Alles auswählen
#define WHILE while (
#define DO ){
#define END }
int x0 = 0,x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0,
   x9 = 0, x10 = 0;
// x0 = x0 mod 2
void x0_mod_2(int x) {
   x0 = x;
   x2 = 1;
   WHILE x0 != 0 DO
      // swap (x1, x2)
      x3 = x1;
      x1 = x2;
      x2 = x3;
      x0 = x0 - 1;
   END
   printf("%d", x1);
}
LonliLokli
 
Beiträge: 337
Registriert: 06.07.07 19:28
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon cracki » 22.03.09 12:45

LonliLokli hat geschrieben:
Code: Alles auswählen
#define WHILE while (
#define DO ){
#define END }
int x0 = 0,x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0,
   x9 = 0, x10 = 0;
// x0 = x0 mod 2
void x0_mod_2(int x) {
   x0 = x;
   x2 = 1;
   WHILE x0 != 0 DO
      // swap (x1, x2)
      x3 = x1;
      x1 = x2;
      x2 = x3;
      x0 = x0 - 1;
   END
   printf("%d", x1);
}


soll das denn funktionieren? der code steht nicht fuer MOD 2...
"I suppose if what you said had any merit it would occasion hostility." -- Kenny Tilton
Frische Vorlesungen! -- video.rwth-aachen.de
Benutzeravatar
cracki
 
Beiträge: 537
Registriert: 22.02.08 14:51
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: ?
Anwendungsfach: Medizin

Beitragvon Mighty Max » 22.03.09 13:09

Klar steht er dafür.

Entspricht dem Ansatz
0 mod 2 := 0
x mod 2 := 1 - ((x-1) mod 2)
Mighty Max
 
Beiträge: 15
Registriert: 31.01.07 16:21

Beitragvon O.D. » 22.03.09 13:45

LonliLokli hat geschrieben:Nein. Ist es nicht. 0-1 = -1
Wie gut, dass Du die negativen Zahlen in Deinem Algorithmus bedacht hast ...

Nein mal ernsthaft, die Vöcking-BuKler: 0-1 ist doch 0, oder?
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Nächste

Zurück zu Theoretische Informatik