我寫Scala程序讀取來自用戶的字符串,並使用任一遞歸下降解析器或解析器組合,以確定是否輸入的字符串的下面的語法相匹配(即,是由a和b),同時建立一個分析樹。如果匹配成功,則輸出生成的樹。Scala的:自定義語法/解析器組合
語法:
S -> E$
E -> C E2
E2 -> E
E2 -> NIL
C -> 'a' | 'b'
我是相當新的斯卡拉所以任何閱讀我們將不勝感激,如果你有任何想法,請讓我知道我怎麼能實現這一點,謝謝。
這是我目前
代碼我已經有:
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:// WWW。 lihaoyi.com/fastparse/)。它是快速,簡單和直觀的庫。有在文檔的一些例子,這裏是我的一些[東東](https://github.com/sake92/nand2tetris)。 –
我只是不明白如何把我自己的語法 – Demuze28