2 Stimmen

Annäherung an Text-Parsing in Scala

Ich mache eine Anwendung, die Befehle in Scala parsen wird. Ein Beispiel für einen Befehl wäre:

todo get milk for friday

Der Plan ist also, einen ziemlich intelligenten Parser zu haben, der die Zeile auseinander bricht und den Befehlsteil und die Tatsache erkennt, dass es einen Verweis auf die Zeit in der Zeichenkette gibt.

Im Allgemeinen muss ich einen Tokenizer in Scala zu machen. Also ich frage mich, was meine Optionen für diese sind. Ich bin vertraut mit regulären Ausdrücken, aber ich plane auf eine SQL-ähnliche Suchfunktion auch machen:

search todo for today with tags shopping

Und ich habe das Gefühl, dass reguläre Ausdrücke bei der Implementierung von Befehlen mit vielen Variationen unflexibel sein werden. Dies führt mich zu denken, der Umsetzung eine Art von Grammatik.

Welche Möglichkeiten habe ich in dieser Hinsicht in Scala?

9voto

Mitch Blevins Punkte 13056

Sie wollen nach "Parser-Kombinatoren" suchen. Ich habe einen Blogbeitrag mit diesem Ansatz ( http://cleverlytitled.blogspot.com/2009/04/shunting-yard-algorithm.html ), aber ich denke, die beste Referenz ist diese Serie von Beiträgen von Stefan Zieger ( http://szeiger.de/blog/2008/07/27/formal-language-processing-in-scala-part-1/ )

2voto

user142435 Punkte 347

Hier sind Folien aus einer Präsentation, die ich im September 2009 über Scala-Parser-Kombinatoren gehalten habe. ( http://sites.google.com/site/compulsiontocode/files/lambdalounge/ImplementingExternalDSLsUsingScalaParserCombinators.ppt ) Es wird eine Implementierung einer einfachen, Logo ähnlichen Sprache demonstriert. Sie könnte einige Einblicke bieten.

1voto

Daniel C. Sobral Punkte 290004

Scala verfügt über eine Parser-Bibliothek (scala.util.parsing.combinator), die es ermöglicht, einen Parser direkt aus seiner EBNF Spezifikation. Wenn Sie eine EBNF für Ihre Sprache haben, sollte es einfach sein, den Scala-Parser zu schreiben. Wenn nicht, sollten Sie zuerst versuchen, Ihre Sprache formal zu definieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X