BUK 2002 - Zadanie domowe, sprawdzanie komentarzy

Zadanie

Napisz program który:
  • wczyta ze standardowego wejścia (stdin) kod źródłowy poprawnego programu w pascalu (jedne nieprawidłowości mogą dotyczyć komentarzy)
  • sprawdzi czy komentarze sa prawidlowo zagnieżdżone,
  • wypisze na standardowe wyjscie stosowny komunikat o prawidlowosci komentarzy

Dobre komentarze opisane są następująca gramatyką:

k  -> k1 | k2
k1 -> { t k } 
k2 -> (* k *)
t -> napisy nie zawierające "{" "}" "(*" "*)"

Należy pamiętać o napisach!, np. następujący program jest w pełni poprawny.

var 
  s:string;
begin
 { ala ma kota }
 s:='{}}(*}';
end.

Napisy są zdefiniowane następującym wyrażeniem:

napis -> "'" ([^"'"] | "'""'")+ "'"

czyli np. poprawne sa następujące polecenia:

Writeln('aaa''xyz');
Writeln('''');
Writeln('xyz''');

Wejście

Kod źródłowy programu należy wczytać ze standardowego wejścia (stdin), wszystkie programy będą poprawne składniowo (z dokładnością do poprawności zagnieżdżenia komentarzy).

Wyjście

Program powinien zapisać na standardowe wyjście:

  • OK jeśli program zawiera prawidłowo zagnieżdżone komentarze,
  • BLAD wpp

Przykład

Dla danych:

begin
  { (* x  ** *) {} } 
end.

prawidłową odpowiedzią jest

OK

Dla danych:

begin
  { (* x  '}' ** *) {} } 
end.

prawidłową odpowiedzią jest

BLAD

Ocenianie

  • wymagane jest nadesłanie źródła i kompilatu na adres: walen@mimuw.edu.pl do dnia 18.03.2002.
  • języki programowania: C/C++/Pascal/Java
  • nie można używać narzędzi lexo-podobnych czy funkcji do analizy wyrażeń regularnych.
  • liczba punktów: 5.
Tomasz Waleń
Tomasz Waleń
Assistant Professor