BNF文法のように読み取るパーサーコンビネーターライブラリを構築することは可能ですか?私は何も知らないので、そうすることが不可能または望ましくない理由があるのだろうかと思い始めました。それは私にとってそれは両方の世界の最良のものであるようです。
F#などの関数型言語では、演算子のオーバーロードが可能です。正しい構文を提供するだけの問題ですか、それともそれ以上のものがありますか?
Haskellプログラミング言語用のParsec/AttoParsecのさまざまなバージョンはかなり近いです。Parsecパーサー定義はBNFにほとんど似ていますが、いくつかの小さな違いがあります(BNFは|
、パーセクには<|>
; BNF :=
は=
パーセク; Parsecは、エラー報告と任意の先読みのためのtry
関数を追加します。
ScalaのParser Combinatorを見てください。これは、BNFの構文に一致するようにゼロから構築されています。