6

現在、次のような動的文字列を解釈できるソフトウェア コンポーネントを作成しようとしています。

%TO_LOWER%(%DELETE_WHITESPACES%("A SAMPLE TEXT"))

これにより、次の文字列が生成されます。

asampletext

セマンティックパラメーターなどを使用して、使用可能な一連の関数を定義できるようにしたいと考えています。正規表現を使用してそれを行う方法を(多かれ少なかれ)知っています。

私の質問は次のとおりです。

  • そのような目的のために、字句解析/解析は正規表現よりも優れていますか、それとも正規表現を使用してそれを忘れるべきですか?
  • そのようなライブラリはすでにJavaに存在しますか?
  • サンプルの解析/字句解析アルゴリズムを示すチュートリアルを知っていますか?

ありがとう!

4

3 に答える 3

7

そのような目的のために、字句解析/解析は正規表現よりも優れていますか、それとも正規表現を使用してそれを忘れるべきですか?

正規表現は再帰文法を表現できず、あなたの構文は再帰文法を必要とするように見えます。この場合、正規表現は単純に問題を解決しません。

そのようなライブラリはすでにJavaに存在しますか?

これはライブラリが解決する問題ではありません。パーサー生成システム (Antlr や Javacc など) を使用してレクサーとパーサーを生成するか、仮想的にゼロから作成する必要があります。前者のアプローチの方がおそらく優れています...この分野をカバーするユニレベルの科目を受講したことがないか、多読する準備ができている場合を除きます。

サンプルの解析/字句解析アルゴリズムを示すチュートリアルを知っていますか?

Antlr と Javacc の両方に、豊富なチュートリアル資料と例があります。

于 2012-09-16T02:55:04.057 に答える
0

Java のみに関連付けられていない場合は、別の言語の PEG パーサーまたは Rebol (PEG と同等の解析「方言」があります) を使用できます。 .com/p/objecticon

Curl にはマクロがあり、AST へのアクセスを提供しているにもかかわらず、MIT Curl Web コンテンツ言語 (www.curl.com) がユーザーに正規表現を選択していることに気付いたのは残念な瞬間でした。

一般的なトピック : パーサー式文法 (PEG) と packrat の解析全般。

Perl の使用は私たちに PCRE を遺してくれました。それで、必要のないときにそれを避ける以外に何ができるでしょうか (antlr と bison があります...そして、それらにも簡単に収まる場所があることは間違いありません)。

注: Rebol、Icon、および Curl は式ベースの言語です (Icon はバックトラッキングが制限されています)。

他の方法のないオプションには、Oz と Mercury が含まれます (後者は erlang を出力できます)。

Python 2.6.6 に限定されているため、pyPEG は使用していません。Python parse Lepl はサポートされなくなりましたが、2.6 にはインストールされます。

Python の解析オプションには、http://theory.stanford.edu/~amitp/yapps/ の YAPPSその他さまざまなものがあります。注: pyparsing は、一部の python 環境でインストールに失敗します

Scala/Java には、この PEG プロジェクトがあります: https://github.com/sirthias/parboiled/wiki

http://piumarta.com/software/peg/ごとに、ペグとレッグに相当する Java を見つけることができます。

CiteSeer には、packrat の解析と Mercury に関する Ralph Becket の記事があります (PEG 解析水銀については google site:psu.edu)。

AdventuresInMercury ブログにも 3 つのブログ投稿シリーズがあります。

于 2013-06-11T16:14:43.313 に答える