WinFuture-Forum.de: [php] Klammerpaare Finden - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Klammerpaare Finden Die Idee


#1 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 13:34

Hallo,

ich arbeite gerade an einer Funktion, die Brainf***-Code interpretiert. Kurz für alle die BF nicht kennen: In BF sind nur einige wenige Befehle vorhanden. Man muss es sich wie ein Array vorstellen, in dem man mit + den aktuellen Zellenwert inkrementiert und mit - dekrementiert. Mit > kann man zum nächsten Element springen und mit < zum vorherigen. Klammern sind [ und ]. Code innerhalb der Klammern wird solange wiederholt, bis der aktuelle Zellenwert, auf den der Zeiger am Ende des Codes innerhalb der Klammern zeigt, 0 ist. Weitere Informationen im Wikipedia-Artikel.

Ich habe bereits alles bis auf die Klammern eingebaut.

Mein Problem ist nun, dass ich nicht weiß wie ich herausfinde welche schließende Klammer (]) zu welcher öffnenden Klammer ([) passt. Wenn die Klammern folgendermaßen angeordnet sind, dann ist es ja kein so schweres Unterfangen. Die erste passt zur letzten und die zweite zur vorletzten. Und so weiter:

+++++[>+++++[>+++++<-]<-]


Die Klammern können aber auch anders aussehen:

+++[>+<-]>[>+<-]


Hier passt ist die öffnende immer vor der schließenden. Das ist mir auch noch möglich. Aber wenn jetzt beide Fälle aufeinmal auftreten, dann habe ich ein Problem.

+++>++<[>[>+>+<<-]>>[<<+>>-]<<<-]


Ich hoffe da kann mir jemand helfen. Wie finde ich Klammerpaare?

Viele Grüße,
PelzigesWaldtier
0

Anzeige



#2 _BIGmo_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 15:09

da ich persönlich noch nie mit so einem code gearbeitet habe kann es durchaus sein, das ich mich irre, aber ist das mit klammern nicht immr eindeutig?

In diesem Fall müsste es doch eigentlich so sein, dass die erste und letzte klammer zusammengehören sowie die 2&3 außerdem noch die 4&5....

Meiner Meinung nach gibt es auch gar keine nadere Möglichkeit oder hab ich was verpasst?
0

#3 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 16:21

Also für mich ist es auch eindeutig nur weiß ich nicht wie ich das in PHP umsetzen kann.

Nehmen wir als Beispiel die zweite Klammer des letzten Beispiels:

+++>++<[>[>+>+<<-]>>[<<+>>-]<<<-]


Wie kann ich mit PHP herrausfinden welche Klammer die passende ist? Nach der ersten "Methode" wäre es die vorletzte schließende Klammer. Das ist aber Quatsch. Nach der zweiten "Methode" wäre die erste schließende Klammer die "richtige". Aber was ist nun mit der ersten öffnenden Klammer. Wäre nicht die erste schließende Klammer auch hier die "richtige"? Das macht ja keinen Sinn.

Dieser Beitrag wurde von PelzigesWaldtier bearbeitet: 16. August 2006 - 17:49

0

#4 _BIGmo_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 16:44

irgendwie verstehe ich auch ier dein problem nicht so ganz...

bei dem beispiel ist es auch eindeutig finde ich...

+++>++<[>[b][u][[/u][/b]>+>+<<-]>>[<<+>>-]<<<-]

ich finde hier nur die möglichkeit für folgende klammerpaare
1./14.
2./3.
4./5.
6./11.
7./8.
9.10.
12./13.
0

#5 Mitglied ist offline   flo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 7.955
  • Beigetreten: 14. November 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 16. August 2006 - 16:45

Hm klingt vielleicht blöd aber du könntest doch die [ und die] klammern zählen.

und die erste 1 passt dann zu der letzten usw
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 16. August 2006 - 16:51

Du musst schon einen Parser dafür schreiben, entweder selbstständig, weil's trivial ist, oder mit einem Parser-Generator. Das Ergebnis des Parsings ist dann ein eindeutiger Syntaxbaum.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 18:01

BIGmo
Mir ist schon klar was da zusammengehört und was nicht. Es geht nur darum, dass ich das irgendwie in PHP schreibe.

Flo:
Das habe ich schon versucht. Aber das klappt bei folgendem Code nicht:
+++[>+<-]>[>+<-]


Rika:
Wenn es trivial für mich wäre, dann hätte ich hier sicherlich niemanden mit meinen Posts belästigt. Vielleicht kannst du mir erklären, wie ich einen solchen Parser schreiben kann. Hast du einen konkreten Vorschlag, wie ich mein Problem in PHP lösen kann?

Dieser Beitrag wurde von PelzigesWaldtier bearbeitet: 16. August 2006 - 18:01

0

#8 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 16. August 2006 - 18:14

Ist das denn so schwer? Ist schließlich 'ne LR-Grammatik. Du brauchst doch nur einen Stack und die Zeichen schrittweise einlesen. Wenn 'ne Klammer kommt, haust du 'ne Klammer auf den Stack und deklarierst den Beginn einer Schleife. Bei einer schließenden Klammern nimmst du, wenn vorhanden, wieder 'ne Klammer vom Stack und arbeitest die deklarierte Schleife bis zu Null ab.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#9 _PelzigesWaldtier_

  • Gruppe: Gäste

geschrieben 16. August 2006 - 18:24

Hey, ich begreife es, glaube ich. Das ist super, danke für die Idee. Das werde ich sofort umsetzen. Ich danke dir vielmals.
0

#10 Mitglied ist offline   mibtng 

  • Gruppe: aktive Mitglieder
  • Beiträge: 298
  • Beigetreten: 03. Juni 05
  • Reputation: 0

geschrieben 16. August 2006 - 18:38

Eine hässliche Möglichkeit wäre auch, wenn sich eine Klammer öffnet, einfach die offenen Klammern zu zählen bis dieser wieder 0 erreicht (Startwert 1, wenn weitere Klammer auf kommt wird um 1 erhöht, wenn schließende Klammer kommt wird um 1 reduziert).

Natürlich ist das eine deutlich hässlichere Lösung als der Vorschlag von Rika, aber das sollte sich auch relativ leicht schreiben lassen so.
0

#11 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 16. August 2006 - 20:11

Du musst aber in jedem Falle auf vermerken, wo eine Schleife beginnt und wo sie endet, bzw. wie mehrere Schleifen ineinander geschachtelt sind, weil du das schließlich für Abarbeitung brauchst. Generell kannst du das alles auch mit dem durch Relocation Records aufgebautem Callstack regeln.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0