Zum Inhalt springen

Lexikalischer Analysator mit Zeichenerkennung


Empfohlene Beiträge

Geschrieben

Hallo,

ich hab ne Aufgabe bei der ich einen lexikalischen Analysator in C++ coden soll, der mit einigen wenigen Regeln auskommt. Die zulässigen Zeichen sind die Terminalklassen b (Buchstaben) z (Zahlen) und das underscore-Zeichen. Ich hab den Analysator bereits implementiert und er läuft unter der Verwendung der chars 'b' 'z' und '_'. Jetzt will ich ihn so umstellen, dass er effektiv ASCII Zeichen erkennt. Mein Code ist ziemlich spaghettimäßig (wegen der Brute-Force Implementierung der Sprachenregeln) aber ich habe bisher nur die Idee gehabt, eben anstatt nach 'b' nach den Werten der ASCII Tabelle abzufragen, die eben der Terminalklasse Buchstaben entsprichen. Gibt es nicht so ein Konstrukt in C++, wo ich quasi alle Buchstaben als char einsetzen kann und dann über ein Symbol darauf zugreifen kann?

Ich hoff irgendjemand hat das überhaupt verstanden was ich will und kann mir da helfen :rolleyes:

thx

Geschrieben

Hmm, ok das versteh ich, ich werds versuchen mit pseudo "kot" auszudrücken

group zahlen {

ASCII werte aller Ziffern;

}

group buchstaben {

ASCII-Werte aller Buchstaben;

quasi 'a' 'b' 'c' ... usw

}

während der lexikalischen prüfung soll dann quasi sowas möglich sein:

if (aktuell eingelesenes Zeichen == Element of zahlen) then....

Dieses group sollte eben das Konstrukt sein mit dem ich eine Abfrage wie

if (aktuelles Zeichen == ASCII-a bis ASCII-z) in jeder Abfrage ersetzen kann...

Ok, jetzt wirds glaub nicht mehr verständlicher, deswegen hoff ich dass es irgendwer bis hierher versteht. Ich suche so etwas wie eine Variable, die eben alle Elemente der Terminalklasse Buchstaben enthält, aber da werd ich halt ne funktion brauchen, die sowas per ASCII-Werte direkt-Abfrage testet denke ich... :confused:

Achja und objektorientiertheit kann ich noch nicht, haben erst vor einigen wochen den umstieg von c auf c++ gemacht...

Geschrieben

Mir ist keine Funktion der C Standartbibliothek bekannt, die prüft, ob es sich bei einem ASCII Zeichen um eine Ziffer oder einen Buchstaben handelt. Allerdings ist das auch nicht besonders schwer selbst zu implementieren, denn alle Ziffern und Buchstaben liegen in der ASCII Tabelle, mehr oder weniger, benachbart, so dass Du nur auf Zahlenbereiche prüfen musst. Besorg Dir am besten eine ASCII Tabelle und schau sie Dir an, dann bekommst Du das sicher recht schnell selbst hin.

Geschrieben

ja, sowas hab ich mir schon hergecodet, hab nur gedacht, vielleicht gibts da irgendwas cooles wie man das besser oder einfach gewitzter machen kann, aber dann lass ichs einfach so mit den ascii-Werten.

Vielen Dank für eure Mühe!

Geschrieben

Im Prinzip kannst du schon ein Konstrukt bauen nach dem Motto:


class Terminalklasse {

  /*...*/

  virtual bool IsValid(const char zeichen) = 0;

};


class Buchstabe : public Terminalklasse {

  bool IsValid(const char zeichen) {

    if (zeichen > 64 && zeichen ....... )

      return true;

    else

      return false;

  }

}

Da könntest du dir dann auch noch ne Fabrikklasse schreiben, die dir anhand eines char-Parameters ne Referenz auf die entsprechende Ableitung von "Terminalklasse" liefert.

Geschrieben

Jo Mann, genau sowas meinte ich eigentlich!!! Dann muss ich mir jetzt nur noch das mit den klassen anschauen, weil so weit sind wir noch nicht im studium, aber das werd ich schon irgendwie herbringen! Danke nochmal !!!!

Geschrieben
Mir ist keine Funktion der C Standartbibliothek bekannt, die prüft, ob es sich bei einem ASCII Zeichen um eine Ziffer oder einen Buchstaben handelt.

Was sind dann die Funktionen isalpha(), isdigit(), islower() und ähnliche aus der C-Standardbibo (und deklariert in ctype.h)?

Gruss,

Glen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...