Einzelnen Beitrag anzeigen

blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Parser: Operatoren

  Alt 13. Apr 2012, 06:39
Hallo!

Ich programmiere gerade an einem Parser und ich stehe bei den überladenen Operatoren ziemlich auf dem Schlauch. Zum Beispiel der Operator "-" ist ja normalerweise überladen: Sowohl "1-1" als auch "1*(-1)" ist möglich. Beim ersten hab ich Argumente auf beiden Seiten und beim zweiten nur eins auf der rechten Seite. Ein anderes Beispiel wäre "x!" und "!x" (Fakultät und Subfakultät). Theoretisch sind also überladene Operatoren möglich, die alle drei Möglichkeiten ausschöpfen: Argument links, rechts und auch auf beiden Seiten.
Dazu kommt noch dass Operatoren wegen dem Datentyp überladen sein können, zB "True and False = False" und "1 and 3 = 1".
Das bedeutet wenn ich 2 Datentypen habe könnte ein einziger Operator aus 6 Überladungen bestehen! Und jede Überladung könnte ihren eigenen Rang haben (mit Rang meine ich die Rangfolge von Operatoren wie z.B "Punkt vor Strich").

Angenommen ich habe nur solche Psycho-Operatoren (davon muss ich ja ausgehen wenn ich ein fehlerfreies Programm haben möchte), wie soll ich dann vorgehen???

1 A A A 1 = (((1 A) A) A 1) oder (1 A (A (A 1))) oder ((1 A) A (A 1))
Und dummerweise entstehen auch Möglichkeiten wie:
(1 A) (A (A 1)) die dann zu einem Fehler führen

Das bedeutet mein erstes Problem ist es erst einmal herauszufinden ob es überhaupt eine gültige Lösung gibt. Und dann stellt sich die Frage welche davon unter Berücksichtigung des Rangs die korrekte ist.

Ich weiß leider nicht mal wirklich wo ich hier anfangen soll. Könnt ihr mir vielleicht weiterhelfen?

Grüße
blablab
  Mit Zitat antworten Zitat