ユーザから文字列を読み込み、再帰的降下パーサまたはパーサコンビネータのどちらかを使って、入力文字列が以下の文法と一致するかどうかを判断するScalaプログラムを作成します。 aとb)、途中に解析木を構築します。そして、マッチが成功すれば、生成されたツリーを出力する。Scala:カスタム文法/パーサーコンビネータ
文法:
S -> E$
E -> C E2
E2 -> E
E2 -> NIL
C -> 'a' | 'b'
は、私はあなたが任意のアイデアを持っている場合はありがとう、私はこれを実装する方法を教えてください、ので、任意の読み取りがはるかに高く評価されるためのScalaかなり新しいです。これは私が既に持っている私は現在持っているもの
コードです
:
class MPParser extends JavaTokenParsers{
def c[C] = (“a” | “b”) ^^ {case ch => C(ch)}
}
abstract class MatchTree
case class C(s:String) extends MatchTree
出力は次のようになります。
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
^
私は[FASTPARSE](HTTPをお勧めします。 lihaoyi.com/fastparse/)。それは速く、シンプルで直感的な図書館です。ドキュメントにはいくつかの例があり、私の[stuff](https://github.com/sake92/nand2tetris)のいくつかがあります。 –
私はちょうど私自身の文法を入れる方法を理解していません – Demuze28