2

Scalaでコマンドを解析するアプリケーションを作成しています。コマンドの例は次のとおりです。

todo get milk for friday

したがって、計画では、かなりスマートなパーサーが行を分割し、コマンド部分と文字列に時間への参照があるという事実を認識します。

一般的に、私はScalaでトークナイザーを作成する必要があります。だから私はこれのための私のオプションは何であるか疑問に思っています。私は正規表現に精通していますが、SQLのような検索機能も作成する予定です。

search todo for today with tags shopping

そして、正規表現は、バリエーションの多いコマンドを実装するのに柔軟性がないだろうと感じています。これは私にある種の文法を実装することを考えるように導きます。

Scalaでのこの点に関する私のオプションは何ですか?

4

3 に答える 3

9

「パーサー コンビネーター」を検索します。このアプローチを使用したブログ投稿 ( http://cleverlytitled.blogspot.com/2009/04/shunting-yard-algorithm.html ) がありますが、Stefan Zieger による一連の投稿 ( http:/ /szeiger.de/blog/2008/07/27/formal-language-processing-in-scala-part-1/ )

于 2009-11-18T18:30:11.090 に答える
2

以下は、私が 2009 年 9 月に行った Scala パーサー コンビネーターに関するプレゼンテーションのスライドです。( http://sites.google.com/site/compulsiontocode/files/lambdalounge/ImplementingExternalDSLsUsingScalaParserCombinators.ppt ) シンプルなロゴのような言語の実装が示されています。それはいくつかの洞察を提供するかもしれません。

于 2009-11-18T20:17:55.600 に答える
1

Scala にはパーサー ライブラリ (scala.util.parsing.combinator) があり、EBNF仕様から直接パーサーを作成できます。あなたの言語の EBNF があれば、Scala パーサーを書くのは簡単なはずです。そうでない場合は、最初に言語を正式に定義することをお勧めします。

于 2009-11-18T23:46:55.443 に答える