Ich schreibe ein Scala-Programm, das eine Zeichenfolge aus dem Benutzer liest, und verwendet entweder eine rekursive Abstammung Parser oder Parser Kombinator, um festzustellen, ob die Eingabezeichenfolge der folgenden Grammatik entspricht (dh besteht aus a's und b's), während man einen Parsebaum auf dem Weg baut. Und dann geben Sie den generierten Baum aus, wenn die Übereinstimmung erfolgreich ist.Scala: benutzerdefinierte Grammatik/Parser Kombinator
Grammatik:
S -> E$
E -> C E2
E2 -> E
E2 -> NIL
C -> 'a' | 'b'
Ich bin ziemlich neu in Scala so wird jede Lesung sehr geschätzt, wenn Sie irgendwelche Ideen haben, lassen Sie es mich wissen, wie ich das umsetzen kann, danke.
Dies ist, was ich zur Zeit
-Code habe ich bereits:
scala> Microproject.main(Array("ababa"))
input : ababa
[1.6] parsed: S(E(C(a),E(C(b),E(C(a),E(C(b),E(C(a),NIL()))))))
scala> Microproject.main(Array("ababac"))
input : ababac
[1.6] failure: `b' expected but `c' found
ababac
^
Ich würde empfehlen, [fastparse] (http: // www. lihaoyi.com/fastparse/). Es ist eine schnelle, einfache und intuitive Bibliothek. Es gibt einige Beispiele in den Dokumenten und hier sind einige meiner [Zeug] (https://github.com/sake92/nand2tetris). –
Ich verstehe einfach nicht, wie man meine eigenen Grammatiken einfügt – Demuze28