Ich arbeite an einem kleinen Haskell-Projekt, das in der Lage sein muss, eine sehr kleine Teilmenge streng formulierter Englisch-in-Tokens für semantisches Parsing zu lexieren. Es ist eine sehr naive natürliche Sprachschnittstelle zu einem System mit vielen verschiedenen Endeffektoren, als Befehle ausgegeben werden können. Ich verwende momentan Alex dafür, aber Alex verlässt sich darauf, dass sein Lexikon statisch kompiliert wird. Die Natur des Systems ist so, dass die Anzahl und sogar der Typ der Endeffektoren in der Welt sowohl zunehmen als auch abnehmen kann, und daher muss ich lebensfähige Token zur Laufzeit aus dem Lexikon hinzufügen oder entfernen können.Gibt es in Haskell Standardlösungen für die lexikalische Analyse, die ein dynamisches Laufzeitlexikon ermöglichen?
Ich habe versucht, sich nach dynamischen lexing Lösungen, und in der Nähe war ich bekommen konnte this Dynamische Lexer-Engine, die nicht aktualisiert wurden, sieht nach seit 2000
Ich habe einige Techniken in Erwägung gezogen wie Verwenden Sie einen weniger hohen Ansatz (Attoparsec, vielleicht), oder sogar eine Neukompilierung Hook für Alex und die lexer vom Rest der Anwendung zu trennen.
Gibt es bekannte Lösungen für diese Art der lexikalischen Analyse? Ich beabsichtige, durch Natural Language Processing for the Working Programmer schließlich zu arbeiten, damit ich einen weniger vereinfachten Ansatz nehmen kann, aber zurzeit ein im Grunde lexer ist, was ich brauche.
Wie viel von einem Problem ist die Leistung? Ich kann mir sehr einfache Lösungen vorstellen, je nachdem, ob Sie sehr viel Effizienz benötigen oder nicht. – sclv
@sclv Leistung muss in Echtzeit sein (im Sinne der Reaktionsfähigkeit, nicht des Determinismus). –
Diese Dynamic Lexer Engine ist nicht automatisch schlecht, nur weil sie seit langer Zeit nicht mehr aktualisiert wurde. Vielleicht ist es bereits perfekt und muss nicht aktualisiert werden. :) –