2017-12-16 3 views
-1

Ich versuche, einen Parser für eine einfache Abfragesprache zu implementieren. Das Ziel ist es, aus dem Text operations zu erzeugen und diese dann auszuwerten, bevor sie an den Baum übergeben werden. Wenn ich richtig verstehe, muss ich einige der Nom-Merkmale implementieren (InputLength, InputTake, Slice).Ist es sinnvoll, `nom` zu verwenden, um benutzerdefinierte Enum-Typen zu verarbeiten?

Teil Weg durch die Umsetzung der InputTake Trait, merke ich, dass ich Subslices der Enums zurückgeben soll, die meine Abfrage-Operationen, bei denen eine Teilung kann durch einen Kennzeichner gemacht werden. Zum Beispiel kann ich eine Kennung name_of_var analysieren und diese take_split() Methode könnte 2 Scheiben erzeugen, die für mich keinen Sinn ergibt.

Was soll ich hier tun? Ich mag die Idee nicht, eine Bool/Nummer zu schneiden, da sie nur als Ganzes sinnvoll ist.

Was denken Sie über die Rückgabe None in dem Fall, in dem ich eine Byte-Slice ungültig halte?

+0

Was ist Ihr Eingabetyp? Ist es nicht '& str'? Oder trennen Sie den Text in einer Liste von Tokens, die Sie dann mit nom bearbeiten möchten? –

+0

Ich habe herausgefunden, was ich falsch gemacht habe. Ich nahm an, dass der Ausgabetyp eines Parsers die Eingabe eines Parsers war. Was wirklich passiert ist, dass alle Parser den gleichen Eingangstyp erwarten und zurückgeben können, was auch immer sie mögen. Das erzeugte Objekt (welches ein AST ist) wird am Ende zurückgegeben und manipuliert. Ich fand das buchstäblich 5 Minuten nach dem Posten. – candronikos

+0

Ich stimme für das Schließen dieser Frage als Off-Topic, weil Sie sagen, dass Sie das Problem herausgefunden haben, aber die Lösung nicht als Antwort posten, sondern Sie haben es als Kommentar gepostet. –

Antwort

0

Für was es wert ist ...

ging ich davon aus, dass der Ausgabetyp eines Parser die Eingabe eines Eltern-Parser war. Was wirklich passiert ist, dass alle Parser den gleichen Eingabetyp erwarten und zurückgeben können, was immer sie wollen. Das erzeugte Objekt (welches ein AST ist) wird am Ende zurückgegeben und manipuliert.

Verwandte Themen