AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fremde Syntax überpüfen (Parser ?)
Thema durchsuchen
Ansicht
Themen-Optionen

Fremde Syntax überpüfen (Parser ?)

Ein Thema von RWarnecke · begonnen am 22. Feb 2011 · letzter Beitrag vom 22. Feb 2011
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 17:42
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:
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
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.

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.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (22. Feb 2011 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 17:45
Beispiele von deiner Seite sind auch jederzeit willkommen =)
(das Ganze ist ein bisschen zu trocken!)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 17:53
Beispiele von deiner Seite sind auch jederzeit willkommen =)
(das Ganze ist ein bisschen zu trocken!)
Wieso zu trocken ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 18:15
ich muss in einem Programm eine fremde Syntax überprüfen
Was bedeutet Syntax überprüfen?
Es geht irgendwie um Übergabeparameter eines Programms namens "test.exe"; das ist soweit klar, aber alles andere ist Unklar.
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?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 18:17
@Rolf: genaugenommen möchtest du also nicht eine syntaktische (Regeln) Prüfung vornehmen, sondern eine semantische (Bedeutung), oder sehe ich das falsch?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 18:32
Was bedeutet Syntax überprüfen?
Ob die Parameter Param1 bis Param11 richtig angewendet werden oder nicht.
Soll die Prüfung durch einen automatischen Test erfolgen oder soll die Prüfung manuell stattfinden?
Macht das einen Unterschied, ob automatisch oder manuell ?
Suchst du nach einem Algorithmus, der alle möglichen Kombinationen von Übergabeparametern liefert?
Nicht liefert sondern überpüft.
@Rolf: genaugenommen möchtest du also nicht eine syntaktische (Regeln) Prüfung vornehmen, sondern eine semantische (Bedeutung), oder sehe ich das falsch?
Ich möchte schon eine syntaktische Prüfung, da ja der Param7 nur dann benutzt werden darf, wenn Param6 auch im Befehl mit drinsteht. Steht Param6 nicht mit in der Zeile, so muss später Param7 als Fehler angezeigt werden. Das ist mein Ziel.

Edit:
richtiger Befehl :
Code:
Befehl1 'test.exe' 'parameter' /Param1 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8
falsche Befehle mit Erklärung :
Code:
Befehl1 'test.exe' 'parameter' /Param1 /Param2 /Param3 /Param4 /Param5 /Param7 /Param8
Bei diesem Beispiel muss Param7 markiert werden, da dieser Parameter von Param6 abhängig ist.

Code:
Befehl1 'test.exe' 'parameter' /Param1 /Param9 /Param2 /Param3 /Param4 /Param5 /Param6 /Param7 /Param8
Bei diesem Beispiel muss Param9 markiert werden, da nur Param1 oder Param9 oder Param10 oder Param11 benutzt werden dürfen.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (22. Feb 2011 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 18:40
Ich möchte schon eine syntaktische Prüfung, da ja der Param7 nur dann benutzt werden darf, wenn Param6 auch im Befehl mit drinsteht. Steht Param6 nicht mit in der Zeile, so muss später Param7 als Fehler angezeigt werden. Das ist mein Ziel.
Okay, ich versuche es mal kurz zu formulieren. Syntax wäre in natürlichen Sprachen die Grammatik und Rechtschreibung, während Semantik die Bedeutung und Zusammenhänge beleuchtet (bspw. Ausdruck und Inhalt auf eigener Ebene ohne Betrachtung der Rechtschreibung oder Grammatik). Obwohl, wenn ich es mir nochmal so anschaue könnte man das auch komplett auf Ebene der Grammatik (also Syntax) formulieren (abhängig vom benutzten Ansatz). Also nix für ungut

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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 19:01
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;
Andreas

Geändert von shmia (22. Feb 2011 um 19:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 19:07
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Fremde Syntax überpüfen (Parser ?)

  Alt 22. Feb 2011, 20:23
Hallo Rolf,

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 ?
nein, braucht man nicht generell. Aber es gibt sogenannte Parser-Generatoren. Die erlauben dir die Regeln deiner Grammatik in einer lesbareren Form zu formulieren (bspw. BNF, EBNF) und die Eingabe in Token zu zerlegen. Ein Klassiker ist hier flex.

Du kannst einen Parser aber allemal händisch implementieren.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz