Muss Analyse-Werkzeugs selbst schreiben...
-
Hallo!
Ich muss für die Uni ein Analyse Werkzeug für C selber schreiben. Leider habe ich bis jetzt keine Idee für einen Ansatz. Hoffe jemand kann mir da mal nen Tipp geben.
Die Aufgabenstellung ist wie folgt:
- C Testcode-Datei wird dem zu schreibendem Programm per Kommandozeile übergeben.
DIES IST KEIN PROBLEM - DER REST SCHON....
- Das Programm soll folgende Ausgaben über die Testdatei machen:
* Auflistung aller in der Quelldatei definierten Funktionen / Prozeduren
* Bei jeder Funktion / Prozedur:
o Anzahl der Formalparameter
o aufgerufene Funktionen / Prozeduren und Anzahl der Aktualparameter;
Angabe, ob konsistent oder nicht
o Anzahl der aufgefundenen goto-Anweisungen
o Anzahl der Fallunterscheidungen ohne AlternativeDie goto-Anweisungen kann man ja bestimmt mit ner normalen Stringsuche finden.
Allerdings die Funnktionssache..... keinen Schimmer wie ich da ansetzen muss....Hoffe jemand hat ne Idee und melde mich natürlich...
Gruss,
zw2stein
-
zw2stein schrieb:
Die goto-Anweisungen kann man ja bestimmt mit ner normalen Stringsuche finden.
char *gotostr = "goto \"goto\" goto!";
-
najaa, du müsstest schon nen bisken in die Parser einsteigen..
ein token das nicht bekannt ist und nach dem eine Klammer kommt ( mit irgendwas drin) ist eine Funktion, wenn anschließend die Blockklammer kommt..
Probier doch mal die YACC/BISON, etc..
-
Hallo,
schau dir mal den Little C Interpreter von Schmidt an...
-
Eine Alternative zum Parsen mit z.B yacc wären einfach Reguläre Ausdrücke.
Siehe http://de.wikipedia.org/wiki/Regulärer_Ausdruck
-
C ist keine reguläre Sprache.
-
... was aber (nach meiner, vll auch falschen Meinung) nicht heisst, dasss man z.B Funtionsdefinitionen nicht mit RegExp extrahieren kann. Man will ja keinen Parser bauen!
Bin leider nicht sehr gut informiert im Bereich Compilerbau und Sprachen.
Könnte mir vll jemand verständlich erklären was denn eine Reguläre Sprache ist, warum C keine ist, und worin der Zusammenhang zwischen Regulären Ausdrüchen udn einer Regulären SPrache besteht?
-
Vereinfacht: Eine reguläre Sprache ist etwas, was man mit einem endlichen Automaten parsen kann (also mit endlich vielen Zuständen). Ein regulärer Ausdruck ist eine bestimmte Form, einen solchen Automaten anzugeben, und damit indirekt auch die von ihm erkannte Sprache.
Eine kontextfreie Sprache benötigt zum Parsen mindestens etwas, das zu einem Stack äquivalent ist, damit man beispielsweise öffnende und schließende Klammern einander zuordnen kann.Stichwort zum Weitersuchen: Chomsky-Hierarchie. Für Masochisten: Pumping-Lemma.
-
Ah, jetzt wird mir einiges klar, danke Bashar!