Seite 1 von 1

braklet , eine generische markup parser/renderer bibliothek

Verfasst: Donnerstag 19. Juli 2007, 15:07
von ronny
hi, ich habe grade die erste halbwegs funktionierende version von meiner markup parser/renderer lib fertiggestellt

damit kann man recht einfach lexer/renderer für versch markup sprachen definieren

hier mal ein einfacher lexer für korrekte klammerausdrüke

Code: Alles auswählen

class KKAS(DirectiveState):
    prefix=""

class KKADirective(SimpleDirective):
    def start(self):
        if self.lexer.match(r"\(") is not None:
            return KKAS(start=self)
    def end(self,state):
        if self.lexer.match(r"\)") is not None:
            return KKAS(end=self)

class KKaLexer(BaseLexer):
    directives = [ KKADirective ]

test_text = "(()( )(nil()))()"

__test__={
"KKA":"""
>>> kka = KKaLexer(test_text)
>>> for i in kka: 
...     print repr(i), i.tag
u'(' <KKA start>
u'(' <KKA start>
u')' <KKA end>
u'(' <KKA start>
u' ' <Text>
u')' <KKA end>
u'(' <KKA start>
u'nil' <Text>
u'(' <KKA start>
u')' <KKA end>
u')' <KKA end>
u')' <KKA end>
u'(' <KKA start>
u')' <KKA end>
""",
}
ich hab auch einen tarball online gestellt (es gibt jedoch noch ein paar kleinere logikfehler für den komplexeren an moin angelehnten wiki lexer)

http://ronny.uberhost.de/~ronny/braklet-0.0.1.tar.gz

Verfasst: Donnerstag 19. Juli 2007, 16:16
von EnTeQuAk
Hmm... sieht irgentwie aus, wie eine neu zusammengehackte Version von Tekisuto nur ohne wichtige Sachen, wie eine Token Klasse, einen gewissen TokenStream, der eine Verbindung zwischen Parser und Lexer darstellt und einigen anderen Sachen.

Zumindest finde ich entsprechendes in deinem Paket nicht.


Weiterhin sieht die API irgentwie unschön/unausgegoren aus. Da sieht das Original (sollte deiner von Tekisuto abstammen) schöner.


MfG EnTeQuAk

Verfasst: Donnerstag 19. Juli 2007, 16:30
von ronny
token klasse habe ich, sie funtkioniert jedoch wie ein string, der mit einer markierung (tag) versehen ist

daduch bin ich freier was die art und den typ der markierung angeht, und ich kann meistens wie mit strings arbeiten

ich will in der lage sein, direkt von datenströmen (wie dateien) zu lesen, und das ganze im durchlaufen in einen token strom zu verwandeln, und diesen auch zu transformieren

die interfaces sind in der tat noch etwas unausgegoren, das soll sich aber ändern ^^

*edit* den tokenstom aus den anderen beiden kenne ich, jedoch passt er nicht so ganz auf die art und weise, wie ich die den tokenizer einsetzen will