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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Traggger
User
Beiträge: 27
Registriert: Mittwoch 17. Dezember 2008, 11:33
Wohnort: Regensburg

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...
There are 10 kinds of people. Those who understand binary notation, and those who do not.
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Nur zur Information, es gäbe da auch pycparser :) Mit Regex kommst hier nicht sehr weit.

Gruß,

Fred
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.
http://www.kinderpornos.info
Benutzeravatar
Traggger
User
Beiträge: 27
Registriert: Mittwoch 17. Dezember 2008, 11:33
Wohnort: Regensburg

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...
There are 10 kinds of people. Those who understand binary notation, and those who do not.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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)
http://www.kinderpornos.info
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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)
Benutzeravatar
Traggger
User
Beiträge: 27
Registriert: Mittwoch 17. Dezember 2008, 11:33
Wohnort: Regensburg

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 :)...
There are 10 kinds of people. Those who understand binary notation, and those who do not.
Antworten