AGB  ·  Datenschutz  ·  Impressum  







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

Unerwünschte Zeichen ?

Ein Thema von Nils_13 · begonnen am 28. Sep 2010 · letzter Beitrag vom 28. Sep 2010
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Unerwünschte Zeichen ?

  Alt 28. Sep 2010, 16:26
Hi,

ich muss eine Syntaxanalyse durchführen von einer ganz einfach Sprache. Das geht alles super, habe auf dem Gebiet ja auch schon etwas Erfahrung und weiß was man so falsch machen kann. Doch eins ist fatal: Der Lexer generiert mir seltsamerweise leere Zeilen. Es geht nicht darum dass diese leeren Zeilen schlecht sind weil sie nicht perfekt sind, sondern es geht darum dass der Parser deshalb anschließend durcheinander kommt. Denn ich will mit leeren Zeilen nichts mehr zu tun haben, da sie nur Ärger machen und sowieso keinen Sinn haben (der Lexer weist den Tokens die Position im Originaltext zu um am Ende einen Fehler genau positionieren zu können - daher sind leere Zeilen auf alle Fälle sinnlos und fehleranfällig sowieso). Ich habe zur einfachen Übersicht ein paar Grundfunktionen, zum Beispiel eine die mir die Tokens am Ende zu einem Gesamttokenarray hinzufügt. Diese Prozedur prüft natürlich auch zur Sicherheit nochmal ob denn Trim(<TokenString>) = '' ist. Doch scheinbar kommt da irgendetwas durch, was kein '' aber dafür unsichtbar ist. Ich habe stupide schon über eine Schleife geschaut, wie viele Zeichen es denn gibt die NICHT zum zulässigen Alphabet gehören. Es waren genauso viele wie ich leere Zeilen habe. Also gibt es irgendwo ein Zeichen, welches meine if-Abfrage austrickst. Habt Ihr eine Idee, welches Zeichen das sein kann und wie man unerwünschte und irrelevante Zeichen in dem Kontext einfach los wird ? Bin da etwas am verzweifeln, zumal ich nicht mal rauskriege welches Zeichen mir da einen Streich spielt.

Gruß,
Nils
  Mit Zitat antworten Zitat
shmia

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

AW: Unerwünschte Zeichen ?

  Alt 28. Sep 2010, 16:55
Möchtest du vielleicht alle Zeichen eliminieren, die nicht erlaubt sind?

Delphi-Quellcode:
// entfernt alle Zeichen aus <S>, die nicht in <Chars> sind
function StrKeepChars(const S: string; const Chars: TSysCharSet): string; // aus der JCL
var
  Source, Dest: PChar;
  Len, Index: Integer;
begin
  Len := Length(S);
  SetLength(Result, Len);
  UniqueString(Result);
  Source := PChar(S);
  Dest := PChar(Result);
  for Index := 0 to Len-1 do
  begin
    if Source^ in Chars then
    begin
      Dest^ := Source^;
      Inc(Dest,SizeOf(Char));
    end;
    Inc(Source,SizeOf(Char));
  end;
  SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(Char));
end;

clean_string := StrKeepChars(bad_string, ['0'..'9', 'A'-'Z', 'a'-'z', '!', '"']);
Andreas
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

AW: Unerwünschte Zeichen ?

  Alt 28. Sep 2010, 16:59
Das funktioniert doch schon mal sehr gut, vielen Dank. Die unerwünschten Leerzeilen sind eliminiert.
  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 10:20 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