Thread Modulempfehlung für Suchfunktion (38 answers)
Opened by bianca at 2010-07-11 08:58

topeg
 2010-07-19 15:58
#139936 #139936
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
2010-07-19T13:27:54 bianca
Also das Zerlegen des ganzen Strings in Wörter. Im Großen und Ganzen sieht das aus wie ein @elements=split/ /,$zu_parsender_text.

Nicht nur im großen in ganzen, mein Beispiel macht genau das. Es dient nur zur Veranschaulichung was ein rekursiver Parser macht.

2010-07-19T13:27:54 bianca
Hab ich das bis hierher richtig verstanden?
Ein rekursiver Parser ist also nichts weiter als dies?
OK, dann hatte ich mir mehr darunter vorgestellt als es ist.

"nur" ist hier etwas dehnbar. Er macht schon eine Menge und man kann die Struktur für fast alle Parser-Probleme verwenden, wenn man die Funktion es verstanden und verinnerlicht hat.

2010-07-19T13:27:54 bianca
Wie kommt denn nun das Speichern einer Bedingung ins Spiel?

Der Benutzer gibt ein "das AND Text" und daraus soll die Bedingung "enthält 'das' && enthält 'Text'" entstehen, die ich auf $text anwenden möchte?


Ich Liefere einfach eine Array zurück. Genauso gut kannst du eine Komplexere Datenstruktur erzeugen. Auch musst du dich nicht darauf beschränken ein einzelnes Zeichen zu untersuchen, du kannst auch ganze Blöcke suchen und Bearbeiten.

Um einen Parser schreiben zu können musst du dir ein Datenformat ausdenken und genau beschreiben. Mit allen Ausnahmen und Besonderheiten. Wenn du dir genau überlegst was du genau haben willst und wie die abhängigkeiten sind, fällt es nicht mehr sehr schwer das in Programmcode zu gießen.


Um dir eine Hilfestellung zu geben.

Ein Solcher String das AND Text OR was anderes AND
ließe ich wie folgt strukturieren: (das AND (Text OR (was anderes AND Bla)))
Bzw:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
(
"das"
AND
(
"Text"
OR
(
"was anderes"
AND
"Bla"
)
)
)



Du hast zwei Befehle "und" (AND) und "oder" (OR)
Ein "Befehl" setzt sich aus einem "Wert" gefolgt vom Befehlsnahmen und einem weiteren "Wert" zusammen
Ein Wert kann ein Befehl oder ein "String" sein.
Ein String ist eine Kette von Zeichen die weder "AND" noch "OR" enthalten.
Die Gewichtig der Befehle ist von links nach rechts, das bedeutet, das der rechte "Befehl" höhre Priorität besitzt als der Linke.

Edit: links<>rechts vertauscht, alter Fehler von mir...
Last edited: 2010-07-19 16:00:37 +0200 (CEST)

View full thread Modulempfehlung für Suchfunktion