Frage

Wie in der einfachen Weise zu analysieren, ein .h Datei geschrieben in C für Kommentare und Entitätsnamen mit Python ?

Wir sind für ein weiteres Schreiben der Inhalte in die Word-Datei bereits entwickelt annehmen.

Quelle Kommentare werden mit einer einfachen Tag-Stil Regeln formatiert. Kommentar-Tags für eine einfache Unterscheidung einer Einheit Kommentar von den anderen und nicht-Dokumentation Kommentaren verwendet. Ein Kommentar kann in mehrzeiligen Form vorliegen. Ein jeder Kommentar haben bleiben gerade auf die Einheitsdefinition:

//ENUM My comment bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
//     could be multi-line. Bla bla bla bla bla bla bla bla bla.
enum my_enum
{
    //EITEM My enum item 1.
    //      Just could be multi-line too.
    MY_ENUM_ITEM_1,

    //EITEM My enum item 2
    MY_ENUM_ITEM_2,
};

//STRUCT My struct
struct my_struct {

    //MEMBER struct member 1
    int m_1_;
};

//FUNC my function 1 description.
//     Could be multi-line also.
//INPUT  arg1 - first argument
//RETURN pointer to an allocated my_struct instance.
my_struct* func_1(int arg1);

Ein Code-and-Kommentare Baum als Ergebnis dieser Analyse herauskommen soll.

Wie man es macht schnell und ohne Bibliotheken von Drittanbietern mit

War es hilfreich?

Lösung

Hier ist eine schnelle und schmutzige Lösung. Es wird nicht damit umgehen Kommentare in Strings, aber da dies nur für die Header-Dateien ist das kein Problem sein sollte.

S_CODE,S_INLINE,S_MULTLINE = range (3)
f = open (sys.argv[1])
state = S_CODE
comments = ''
i = iter (lambda: f.read (1), '')
while True:
    try:
        c = i.next ()
    except StopIteration:
        break
    if state == S_CODE:
        if c == '/':
            c = i.next ()
            if c == '*':
                state = S_MULTLINE
            elif c == '/':
                state = S_INLINE
    elif state == S_INLINE:
        comments += c
        if c == '\n':
            state == S_CODE
    elif state == S_MULTLINE:
        if c == '*':
            c = i.next ()
            if c == '/':
                comments += '\n'
                state = S_CODE
            else:
                comments += '*%s' % c
        else:
            comments += c
print comments

Andere Tipps

Dies ist bereits geschehen. Mehrere Male über.

Hier ist ein Parser für die C-Sprache in Python geschrieben. Beginnen Sie mit diesem.

http://wiki.python.org/moin/SeeGramWrap

Andere Parser.

http://wiki.python.org/moin/LanguageParsing

http://nedbatchelder.com/text/python-parsers.html

Sie könnten wahrscheinlich jede ANSI C Yacc Grammatik herunterladen und in PLY-Format überarbeiten, ohne zu viel Mühe und verwenden, die als Startpunkt.

Vielleicht shlex Modul tun würde?

Wenn nicht, gibt es einige leistungsfähigere Alternativen: http://wiki.python.org/moin/LanguageParsing

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top