AGB  ·  Datenschutz  ·  Impressum  







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

Einfachen Parser generieren

Ein Thema von Peter666 · begonnen am 8. Okt 2011 · letzter Beitrag vom 9. Okt 2011
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Einfachen Parser generieren

  Alt 8. Okt 2011, 17:11
Zuerst würde ich mal eine GetToken() -Funktion schreiben: Diese liefert dir jeweils das nächste „Wort“, also entweder
  • ein Schlüsselwort (if, for),
  • einen Eigenschaftsnamen (z.B. mosaic_entry_point),
  • einen String (z.B. "undefined", "video", "still picture")
  • eine Zahl oder
  • eine „Einheit“ (hex, ones, byte_counter)
Das ist recht einfach umzusetzen, da du nur zu Anfang schauen musst, ob das aktuelle Zeichen ein Anführungszeichen ('"') ist. Wenn ja, suchst du einfach das nächste Anführungszeichen und lieferst den dazwischenliegenden String als Ergebnis zurück (Escaping ist hier jetzt nicht berücksichtigt, wenn zwischen den Anführungszeichen wiederum Anführungszeichen in Form von Dopplung oder \-Escaping stehen können, wird es minimal komplizierter). Wenn es ein anderes Zeichen (z.B. eine Ziffer oder ein Buchstabe) ist, suchst du einfach den nächsten Whitespace, und kopierst, was dazwischen liegt. Für Klammern bräuchte man noch eine Sonderbehandlung, diese sollten immer direkt als Token angesehen werden, auch wenn kein Whitespace folgt.

In einer übergeordneter Routine kannst du dann prüfen, ob das zurückgelieferte Token ein Schlüsselwort ist, und entsprechend reagieren (z.B. Sub-Routine aufrufen, die nur für das Parsen der jeweiligen Struktur zuständig ist). Wenn du es so machst, hast du auch gleich das Verschachtelungs-Problem gelöst, da du ansonsten einen extra Stack bräuchtest.
  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:42 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