![]() |
Fremde Syntax überpüfen (Parser ?)
Hallo zusammen,
ich muss in einem Programm eine fremde Syntax überprüfen. Ich habe dazu keinerlei fremdes Werkzeug was ich dazu nutzen könnte. Ich habe zum Beispiel den folgenden Befehl :
Code:
In dieser Syntax ist Param1, Param9, Param10, Param11 in einer ODER-Verknüpfung und Param7 ist in Abhängigkeit von Param6. Param2 bis Param8 sind optional. Die Mindestanforderung sind nur Param1 oder Param9 oder Param10 oder Param11.
Befehl1 'test.exe' 'parameter' /Param1 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8
Befehl1 'test.exe' 'parameter' /Param9 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8 Befehl1 'test.exe' 'parameter' /Param10 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8 Befehl1 'test.exe' 'parameter' /Param11 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8 Es gibt noch mehrere solcher Befehle. Meine Frage ist jetzt, wie kann ich am besten die Syntax überprüfen ? Ich habe dabei schon an einen Parser gedacht, nur leider verstehe ich das Prinzip nicht wie ein Parser arbeitet und wie ich diesen in mein Programm einpflegen kann. Vielleicht kann mir das ja auch jemand anhand diesem Beispiel erklären. Links zu Tutorials und/oder Beispiele sind jederzeit willkommen ;-) Edit: Das Leerzeichen bei Befehl 1 entfernt. |
AW: Fremde Syntax überpüfen (Parser ?)
Beispiele von deiner Seite sind auch jederzeit willkommen =)
(das Ganze ist ein bisschen zu trocken!) |
AW: Fremde Syntax überpüfen (Parser ?)
Zitat:
|
AW: Fremde Syntax überpüfen (Parser ?)
Zitat:
Es geht irgendwie um Übergabeparameter eines Programms namens "test.exe"; das ist soweit klar, aber alles andere ist Unklar. :glaskugel: Bist du im Besitz des Sourcecode von "test.exe"? Soll die Prüfung durch einen automatischen Test erfolgen oder soll die Prüfung manuell stattfinden? Suchst du nach einem Algorithmus, der alle möglichen Kombinationen von Übergabeparametern liefert? |
AW: Fremde Syntax überpüfen (Parser ?)
@Rolf: genaugenommen möchtest du also nicht eine syntaktische (Regeln) Prüfung vornehmen, sondern eine semantische (Bedeutung), oder sehe ich das falsch?
|
AW: Fremde Syntax überpüfen (Parser ?)
Zitat:
Zitat:
Zitat:
Zitat:
Edit: richtiger Befehl :
Code:
falsche Befehle mit Erklärung :
Befehl1 'test.exe' 'parameter' /Param1 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8
Code:
Bei diesem Beispiel muss Param7 markiert werden, da dieser Parameter von Param6 abhängig ist.
Befehl1 'test.exe' 'parameter' /Param1 /Param2 /Param3 /Param4 /Param5 /Param7 /Param8
Code:
Bei diesem Beispiel muss Param9 markiert werden, da nur Param1 oder Param9 oder Param10 oder Param11 benutzt werden dürfen.
Befehl1 'test.exe' 'parameter' /Param1 /Param9 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8
|
AW: Fremde Syntax überpüfen (Parser ?)
Zitat:
Die Klarstellung war auch nur dazu gedacht daß du deine Gedanken in einer Websuche formulieren kannst. Ich habe mir schon viele Male nen Wolf gesucht, nur weil ich den exakten Fachbegriff für etwas nicht kannte ... (mit Begriff war es eine Sache von Sekunden). Nachtrag: Tokenizer und Parser könnten hier durchaus funktionieren, wenn du diesen Aufwand nicht scheust. Mir ist so als gab es da mal ein entsprechendes Programm von Mike Lischke. |
AW: Fremde Syntax überpüfen (Parser ?)
Ich weiss nicht...so ein Parser ist doch schon Overkill.
Das Vorhandensein von Parameter 1 bis 11 lässt sich leicht als Boolean-Array abbilden. Und die verbalen Regeln lassen sich über if-Bedingungen formulieren.
Delphi-Quellcode:
type
TParamExists = array[1..11] of Boolean; procedure CheckParams(param : TParamExists); var c : integer; begin c := 0; if param[1] then Inc(c); if param[9] then Inc(c); if param[10] then Inc(c); if param[11] then Inc(c); // Prüfe Mindestanforderung if c = 0 then raise EParam.Create('Es muss mindestens einer der Parameter 1,9, 10 oder 11 angegeben werden') else if c > 1 then raise EParam.Create('Parameter 1,9, 10 und 11 dürfen nicht gemeinsam verwendet werden') if param[7] and not param[6] then raise EParam.Create('Verwendung von Parmeter 7 nur möglich, wenn auch Parameter 6 vorhanden ist'); // hier weitere Regeln ... end; |
AW: Fremde Syntax überpüfen (Parser ?)
Hallo Andreas,
das wäre eine Variante, nur was mache ich mit den anderen Befehlen ? Ich habe ja nicht nur den einen sondern mehrere, wäre da vielleicht doch ein Parser besser ? ------------------------------------------------ Hallo Oliver, ich habe zum Anfang nur nach Syntaxcheck oder Syntax Überprüfung gesucht und bin auf Umwegen zu dem Begriff Parser gelangt. Brauche ich denn ein extra Programm um einen Parser in mein Programm zu implementieren ? |
AW: Fremde Syntax überpüfen (Parser ?)
Hallo Rolf,
Zitat:
Du kannst einen Parser aber allemal händisch implementieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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