Program który będzie analizował poprawność kodu w języku C

0

Hej, dopiero zaczynam programować i potrzebuje pomocy z napisaniem jednego programu, a mianowicie:

Napisać program który będzie analizował poprawność kodu w języku C.
Dane wejściowe: plik z kodem źródłowym
Dane wyjściowe: plik tekstowy zawierający raport z analizy

Realizowana funkcjonalność:

  1. Wyszukanie wszystkich definicji funkcji: i posortowanie ich według nazw Przy każdej
    funkcji powinna być informacja o ilości argumentów i typie zwracanej wartości

Nie do końca wiem nawet jak zacząć, byłabym wdzięczna za pomoc :)

0

Obejrzyj jak jest to zrobione w profi narzędziach, np. GCC.

2

Dopiero zaczynasz programować i już masz pisać program analizujący kod w C (zakładam że z uczelni)? Brzmi mało wiarygodnie.

W każdym razie, w zależności jak profesjonalne to ma być, możesz:

  • napisać parser języka C w jakimś narzędziu (lex, bison, nie jestem pewien czego się w C++ używa) i użyć go do wyciągnięcia informacji których potrzebujesz (będzie dość prosto, bo cała zawartość funkcji Cię nie interesuje, poza tym żeby była poprawna składniowo). Jeśli przedmiot to nie jakaś teoria automatów i nie mieliście takich rzeczy to prawdopodobnie nie o to chodzi.
  • napisać jakiś prosty "parser" za pomocą regexów albo i ręcznie szukający rzeczy pasujących do wzorca (z głowy wymyślając) W W ( [W W [, W W]+ ]) { (gdzie W to dowolny token w C). Czyli mniej-więcej jak wyglądają funkcje w C (typ_zwracany nazwa_funkcji(typ_1 nazwa_1, typ_2 nazwa_2) {) (słabe ale proste rozwiązanie)
  • użyć clanga żeby wykonał tą pracę za Ciebie i wypisać wynik (rozwiązanie które raczej na uczelni przejdzie, a jest życiowe) ;]
  • etc
0

Pisanie gramatyki do parsowania C++ to raczej hardkorowy pomysł. Ja bym leciał jednak jakimś regexpem.

0

Pisanie gramatyki do parsowania C++ to raczej hardkorowy pomysł. Ja bym leciał jednak jakimś regexpem.

C nie C++. Na C++ bym się nie porywał :P. Zakładając brak preprocesora etc to powinno to być nawet wykonalne.

Z regexpem nie będzie tak porządnie, chociażby dlatego że `string s = "int main() { return 0; }" (ale można zrobić tak żę w normalnym kodzie działa w 99.9% przypadków).

0

Profesorzy na Politechnice Warszawskiej mają takie pomysły, nie biorą pod uwagę tego, że np. ja nigdy w życiu nie programowałam i uczę się wszystkiego od podstaw(tzn. próbuję :P). Dziękuję Wam bardzo za pomoc, będę próbowała coś tworzyć

1 użytkowników online, w tym zalogowanych: 0, gości: 1