2010-12-17 6 views
4

Für meine Anwendung brauche ich einen Parser, der direkte Beschreibungen von Daten verarbeiten kann, z. "31.12.10" für das Silvester dieses Jahres, kann aber auch Beschreibungen von/Wiederholung/Daten, z. "Erster Montag jeden Monats." Boost :: date_time hat bereits ein Konzept von Datumsgeneratoren, aber ich denke nicht, dass es eine allgemeine Möglichkeit bietet, Strings in diese zu konvertieren, ohne den Typ des Generators zu kennen, der erzeugt wird.Bibliothek zum Parsen von Beschreibungen wiederkehrender Daten in C++?

Bevor ich gehe und das Rad neu erfinde, gibt es da schon was zu tun? Ich bin flexibel mit der genauen Sprache der Strings, nur solange es ein Nichtprogrammer lesen und verstehen kann.

Antwort

0

Sie können Ihre eigene Grammatik in EBNF schreiben und dann einen Lexer/Parser-Generator verwenden, um ein Code-Skelett für Sie zu erstellen.

2

Sie können die wunderbare boost :: spirit-Bibliothek verwenden.

Es ermöglicht Ihnen, einfach Parser für diese Art von Sache zu erstellen.

+0

+1 Geist ist eine großartige Bibliothek, lassen Sie sich von seinem Umfang nicht einschüchtern. Die Dokumentation und Beispiele sind sehr hilfreich. –

0

Mit this library, hier Code, der im Jahr 2011 den ersten Montag eines jeden Monats ausdruckt:

#include "date.h" 
#include <iostream> 

int main() 
{ 
    using namespace gregorian; 
    std::cout << date_fmt("%A %B %e, %Y"); 
    for (date d = first*mon/jan/2011; d <= dec/31/2011; d += month(1)) 
     std::cout << d << '\n'; 
} 

Ausgang:

Monday January 3, 2011 
Monday February 7, 2011 
Monday March 7, 2011 
Monday April 4, 2011 
Monday May 2, 2011 
Monday June 6, 2011 
Monday July 4, 2011 
Monday August 1, 2011 
Monday September 5, 2011 
Monday October 3, 2011 
Monday November 7, 2011 
Monday December 5, 2011 

Sie können auch den zweiter bekommen, dritten usw., oder letzter Wochentag eines Monats. Arithmetik kann Tag, Monat oder Jahr sein.

+0

Dies ist das genaue Gegenteil von dem, was die Frage verlangt. Interessante Bibliothek obwohl. –

+0

Einverstanden. Sobald der Parser des OP aufgebaut ist, könnte diese Datumsbibliothek möglicherweise nützlich sein, um die Ausgabe des Parsers darzustellen. –

Verwandte Themen