Bison

Zadanie polega na stworzeniu parsera do analizy zawartości skrzynki pocztowej w formacie mbox.

Parser czytając plik zawierający wiadomości pocztowe ma wypisawać dla każdej wiadomości datę dostarczenia, nadawcę, odbiorcę, temat oraz treść wiadomości.

Przykładowo dla wejścia:

From stefan@uci.agh.edu.pl  Tue Mar  1 12:01:57 2005
Return-Path: <stefan@uci.agh.edu.pl>
Delivered-To: stefan@student.uci.agh.edu.pl
Received: from emix.uci.agh.edu.pl (emix.uci.agh.edu.pl [149.156.96.16])
   by student.uci.agh.edu.pl (Postfix) with ESMTP id CFB9D64655
   for <stefan@student.uci.agh.edu.pl>; Tue,  1 Mar 2005 12:01:56 +0100 (CET)
Received: from localhost (localhost [127.0.0.1])
   by emix.uci.agh.edu.pl (Postfix) with ESMTP id 37D9E2D00B0
   for <stefan@student.uci.agh.edu.pl>; Tue,  1 Mar 2005 12:01:55 +0100 (CET)
Received: from emix.uci.agh.edu.pl ([127.0.0.1])
 by localhost (emix [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
 id 18044-128 for <stefan@student.uci.agh.edu.pl>;
 Tue,  1 Mar 2005 12:01:55 +0100 (CET)
Received: from galaxy.uci.agh.edu.pl (galaxy.uci.agh.edu.pl [149.156.96.9])
   by emix.uci.agh.edu.pl (Postfix) with ESMTP id 0A5192D00B5
   for <stefan@student.uci.agh.edu.pl>; Tue,  1 Mar 2005 12:01:55 +0100 (CET)
Received: by galaxy.uci.agh.edu.pl (Postfix, from userid 8713)
   id 7FDD4AF468; Tue,  1 Mar 2005 12:01:57 +0100 (CET)
Received: from localhost (localhost [127.0.0.1])
   by galaxy.uci.agh.edu.pl (Postfix) with ESMTP
   id 7ADD9DBBA9; Tue,  1 Mar 2005 12:01:57 +0100 (CET)
Date: Tue, 1 Mar 2005 12:01:57 +0100 (CET)
From: Jan Kowalski <stefan@uci.agh.edu.pl>
To: stefan@student.uci.agh.edu.pl,
	Jan Kowalski <stefan@icsr.agh.edu.pl>
Subject: test
Message-ID: <Pine.GSO.4.58.0503011200200.16577@galaxy.uci.agh.edu.pl>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
X-Virus-Scanned: by amavisd-new at agh.edu.pl

test
test


na wyjściu powinno pojawić się:

Data: Tue, 1 Mar 2005 12:01:57
Nadawca: Jan Kowalski <stefan@uci.agh.edu.pl>
Odbiorca: stefan@student.uci.agh.edu.pl, Jan Kowalski <stefan@icsr.agh.edu.pl>
Temat: test
Treść:
test
test

W przypadku nieprawidłowego formatu wejścia proszę o wypisanie komunikatu o błędzie i kontynuowanie analizy.

Parser powinien działać poprawnie dla poprawnego pliku mbox. Dla uproszczenia zakładamy, że wiadomości nie zawierają attachmentów attachentów. Dodatkowo należy sprawdzać poprawności daty i adresu mailowego oraz poprawności linii zaczynających się od Date:, From:, To: (przykładowy błąd to brak linii zaczynającej się od Date:). Wg RFC 822 pole Subject: jest opcjonalne. Sprawdzanie poprawności pozostałych linii (np. rozpoczynających się od Received: czy Message-ID:) nie jest konieczne. Przyjmujemy, że adresy mailowe moga miec postać:

W zadaniu należy wykorzystać generator parserów bison (bison manual).
Inne materiały: "Yacc: Yet Another Compiler-Compiler", S.C. Johnson