Seite 1 von 1

RegEx: Gleiche Anzahl "(" und ")" in Str

Verfasst: Montag 18. Mai 2009, 14:16
von Traggger
Hi Leute,

ich schreibe grad einen Parser für ANSI C um bestimmte C-Statements zu erkennen... Nun da der Sprachumfang von C extrem gewaltig ist, stoße ich immer wieder auf Unregelmäßigkeiten in der Synthax, die aber trotzdem erkannt bzw vorher beseitigt werden müssen/sollten...

als Beispiel:

Code: Alles auswählen

( ( DiagSetResponseError ( ( gbProcessingRequest ) , ( ( 0x12 ) ) ) ) ) ;
das ist eine der SourceCode Stellen in C. Ich brauche den kompletten Funktionsaufruf also mit allem was als formale Parameter mit übergeben wird...

sprich:

Code: Alles auswählen

DiagSetResponseError ( ( gbProcessingRequest ) , ( ( 0x12 ) ) )  ;
das Stück...

ok nun meine Frage, kann man irgendwie mit Hilfe von Regex dynamisch auf gleiche Anzahl von "(" und ")" prüfen um die überflüssigen klammern zu entfernen bzw zu ignorieren...

In sämtlichen docs zu python habe ich nur eine festvorgegebene Anzahl gefunden mittels: aber ich weiß vorher die Anzahl der Klammern nicht!

Hat jemand sowas schonmal handlen müssen und kann mir nen Tipp geben??

Grüße und schonma Danke für eure Bemühungen...

Verfasst: Montag 18. Mai 2009, 14:27
von fred.reichbier
Nur zur Information, es gäbe da auch pycparser :) Mit Regex kommst hier nicht sehr weit.

Gruß,

Fred

Verfasst: Montag 18. Mai 2009, 14:30
von Dill
das ist leider nicht möglich. reguläre ausdrücke können nicht zählen.

falls dich die hintergründe dazu interessieren:

http://de.wikipedia.org/wiki/Chomsky-Hierarchie

edit:
ich merke grade, dass dieser artikel wenig hilfreich ist. evtl. kennt ja jmd eine allgemeinverständliche darstellung...?
du solltest dich da jedenfall ein wenig in die theorie eindenken bevor du einen parser schreiben willst.

Verfasst: Montag 18. Mai 2009, 14:44
von Traggger
Danke, schonmal für die schnellen Tipps...

also ich will C nicht in dem Sinn parsen, ob die Synthax korrekt ist, ich gehen von "0 errors, 0 warnings" compiliertem C-Code aus!
Mit parsen meine ich in dem Fall das erkennen von bestimmten Sprachkonstrukten ( nicht deren Richtigkeit), was es von dem her einfacher macht, aber ich trotzdem mit "Unsauberheiten" im Code zukämpfen habe, weil zum Beispiel Klammern kann man soviele setzen wie man mag, die aber nicht gebraucht werden ;)... Das ist im moment mein Problem... Ich müßte wichtige von unwichtigen klammern unterscheiden...

Verfasst: Montag 18. Mai 2009, 15:01
von Dill
schau dir mal den pycparser an. den hatte ich letztens noch in der hand weil ich einen c-syntaxbaum in xml brauchte. das ging ganz fix. ich denke damit sollte sich deine aufgabenstellung lösen lasen (auch wenn ich jetzt noch nich tso recht vertanden habe was du vorhast)

Verfasst: Montag 18. Mai 2009, 21:29
von sma
Dill hat geschrieben:das ist leider nicht möglich. reguläre ausdrücke können nicht zählen.
Das ist so eine Sache, die weiß man einfach, weil im Studium gelernt :)

Ich finde auch auf die Schnelle keine gute Erklärung und kann mich natürlich nicht mehr daran erinnern, wie das motiviert wurde. Ich meine, das Thema kommt im Zusammenhang mit Automatentheorie und formalen Sprachen daher.

Eine reguläre Sprache kann nicht zählen. So ist das eben.

Ah, Lösung für Aufgabe 27 ist ein Beweis-Ansatz: http://wwwbruegge.in.tum.de/teaching/ss ... sung11.pdf

Stefan

Verfasst: Montag 18. Mai 2009, 21:43
von BlackVivi
Meh, wollte grade schreiben, dass man das mit'n Pumping-Lemma beweisen kann ;_;

Nun denn... mit Kontextfreien Sprachen kann man zählen. Mit Kellerautomaten kann man auch zählen. (Wobei die beiden auch irgendwie zusammenhängen)

Verfasst: Dienstag 19. Mai 2009, 09:06
von Traggger
Danke nochmal...

Hätte ich doch ma besser aufgepaßt in Automathentheorie :(...

Hab mir sowas aber schon fast gedacht...

-> mein Problem hat sich aber schon gelöst, hatte ne ganz kleinen Fehler in meiner regEx und zufälliger Weise sind Statements mit gleicher Struktur nicht erkannt worden was aber nicht an den Klammern vorm Statement sondern an einem erwartetem Leerzeichen lag ;)... :oops:

Aber so bissl Theorie auffrischen schadet nie :)...