AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parser: Operatoren

Ein Thema von blablab · begonnen am 13. Apr 2012 · letzter Beitrag vom 16. Apr 2012
 
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Parser: Operatoren

  Alt 14. Apr 2012, 08:32
Bei Pascal z.B. betrifft dies den '.' (wie in 7.1) und '..' (wie in [1..2]).
Beim rekursiven parsen in einen Grammatikbaum (Term von aussen nach innen) weiss der Parser, dass er eine eckige Klammer betreten
Na ja. Widerspricht ja nicht dem, was ich geschrieben habe. Du kannst '..' als zwei Zeichen des Alphabets für die Programmiersprache Delphi ansehen, oder als ein Zeichen, entsprechend '(*', '*)' etc. Ich habe das immer als ein Zeichen interpretiert. Aber Scanner und Tokenizer arbeiten so. Z.B. bei C#:

a) int i=j++-++x; // geht
b) int i=j+++++x; // geht nicht

Bei A liefert der Tokenizer: id(int) id(i) symbol(assignment) id(j) symbol(plusplus) symbol(minus) symbol(plusplus) id(x)
Bei B liefert der Tokenizer: id(int) id(i) symbol(assignment) id(j) symbol(plusplus) symbol(plusplus) symbol(plus) id(x)

Würde der Parser das erkennen, wären beide Zeilen kompilierbar. Aber nur die erste Zeile funzt, eben weil der Scanner so blöd ist, und im Fall B die ersten zwei Plus-Paare erkennt. Probier's mal aus.

Hmm, aber dein Parser sucht ...
Ein Parser sicht nicht, ein Parser erkennt nur. Algorithmisch gesehen liefert ein Parser die Antwort auf die Frage: 'Ist diese Zeichenkette ein Satz aus der Grammatik G?'. Den Vorgang des Erkennens kann man nutzen, um einen Syntaxbaum aufzuspannen, über den dann das Compilat erzeugt wird. Algorithmisch gesehen wird jedoch nur ein Satz der Sprache 'A' (Delphi) in einen Satz der Sprache 'B' (Assembler) überführt. Das der Maschinencode semantisch äquivalent zum Quellcode ist, ist Glücksache.
Zitat:
Aber im Falle des Minus ist der Fall doch eigentlich klar:
...
Zumindest sind diese Regeln bei Parsern so üblich...
Diese 'Regeln' ergeben sich implizit über die Grammatik. Für deine letzte Regel ist aber der Tokenizer zuständig;
Zitat:
in der Mathematik ist es ja normalerweise nicht erlaubt, dass Operatoren oder mehrere Vorzeichen aufeinander folgen...
Nein, was ist denn daran nicht erlaubt? "a = 1+-+-+-+-+-2;
Zitat:
Bei Fakultät und Subfakultät müsste es so ähnlich sein.
Das ergibt sich aus deiner Grammatik.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz