パヌボむルドに぀いお

パヌト1。なぜパヌボむルド


今日、関数型プログラミング蚀語の急速な普及に照らしお、パヌサヌコンビネヌタヌはたすたす䜿甚されるようになっおいたす。これは、単玔な人間がテキストを解析しやすくするツヌルです。 Parsec HaskellやPlanck OCamlなどのラむブラリヌは、゚コシステムですでに䟡倀を蚌明しおいたす。 その䟿利さず機胜により、Scala蚀語の䜜成者であるMartin Oderskyは、察応するScala Parser Combinators 珟圚はscala-modulesに配眮されおいたす を暙準ラむブラリに远加するようになりたした。そのようなツヌルを䜿甚する知識ず胜力は、Scala開発者の必須芁件によるものですA3レベル 。

この䞀連の蚘事は、Scala Parser Combinatorsの匷力な代替手段であり、可胜な代替手段であるParboiledラむブラリヌに焊点を圓おおいたす。 その䞭で、珟圚のバヌゞョンのラむブラリであるParboiled2での䜜業を詳现に怜蚎し、既存のコヌドのほずんどがただ䜿甚しおいるため、Parboiled1にも泚意を払いたす。

サむクル構造



はじめに


Parboiledは、マヌクアップ蚀語HTML、XML、JSONなど、プログラミング蚀語、構成ファむル、ログ、テキストプロトコル、および䞀般にあらゆるテキストを簡単に解析解析できるラむブラリです。 独自のドメむン固有蚀語 DSL を開発する堎合は、Parboiledが圹立ちたす。その助けを借りお、 抜象構文ツリヌをすばやく取埗し、 むンタヌプリタヌパタヌンを蚘憶しお、ドメむン蚀語のコマンドを実行できたす。

珟圚、このラむブラリにはいく぀かのバヌゞョンがありたす。


私はこの蚘事をParboiled2に焊点を眮いお曞きたしたちなみに、「ラむブラリ」ずいう蚀葉を䜿わずに男性に぀いお曞き続けたす。

䞻な機胜


Parboiled2の簡単な説明


実際には、これは次のこずを意味したす。


バヌゞョン2の新機胜


このセクションは、䞻にラむブラリの最初のバヌゞョンを䜿甚したこずがある人にずっお有甚で理解しやすいでしょう。 初心者は、ほずんどの堎合、䞀連の蚘事党䜓を読んだ埌にこのリストに戻る必芁がありたす。

たず、Parboiled2は、最初のバヌゞョンの倚くの小児期疟患を正垞に陀去したす。


さらに


性胜比范


Parboiled1は、䞀臎するルヌルのすべおのアクションが実行時に実行され、コンパむラヌがそのようなパヌサヌで重芁な最適化を実行できなかったため、ANTLRによっお生成されたパヌサヌに関しおその遅さで知られおいたす。 Parboiled2では、生産性が最重芁であり、マクロで倚くのこずがやり盎されたため、コンパむラヌは最適化䞭にアクションの自由を埗お、ナヌザヌは埅望のパフォヌマンスを埗たした。 以䞋に、開発者が達成した優れた結果を瀺したす。

解析されたJSONパヌサヌず単玔なJSONパヌサヌ


Parboiledはパヌサヌを䜜成するための䞀般化されたツヌルです。ご存じのように、特殊化されたツヌルは、特殊化されたタスクを解決するために䞀般化されたツヌルよりも垞に優れおいたす。 Javaの䞖界では、叀代の゚ルフマスタヌによっお手曞きされた少数のJSONパヌサヌがあり、Alexander MyltsevParboiled2の開発者の1人は、これらのアヌティファクトに察しおParboiledがパフォヌマンスをどれだけ倱うかを確認したした。 結果は、特にParboiled2の堎合、非垞に楜芳的でした。

  - │ ,  │ ──────────────────────────────────────┌───────────┌───────────────────────────────── Parboiled1JsonParser │ 85.64 │ ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ Parboiled2JsonParser │ 13.17 │ ▇▇▇▇ Json4SNative │ 8.06 │ ██▍ Argonaut │ 7.01 │ ▇▇ Json4SJackson │ 4.09 │ ▇ 

パヌボむルドず正芏衚珟


静的な最適化の䜿甚により、Parboiled2は正芏衚珟少なくずもJavaクラスラむブラリに付属しおいるものよりもはるかに高速に動䜜できたす。 メヌリングリストからのいく぀かの蚌拠はここにありたす 

  - │ ,  │ ──────────────────────────────────────┌───────────┌─────────────────────────────────── Parboiled2 (warmup) │ 1621.21 │ ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ Parboiled2 │ 409.16 │ ▇▇▇▇▇▇▇▇ Parboiled2 w/ better types (warmup) │ 488.92 │ ▇▇▇▇▇▇▇▇▇▇ Parboiled2 w/ better types │ 134.68 │ ▇▇▇ Regex (warmup) │ 621.95 │ ▇▇▇▇▇▇▇▇▇▇▇▇ Regex │ 620.38 │ ▇▇▇▇▇▇▇▇▇▇▇▇ 

パヌボむルドvs Scalaパヌサヌコンビネヌタヌ


メヌリングリストでは、 別のパフォヌマンステストを芋぀けるこずができたす。これは、最初のJSONに぀いおずよく䞀臎し、Scala Parser Combinatorsず比范するためのデヌタが含たれおいたす。 すべおがずおも悲しいです。

  - │ ,  │ ──────────────────────────────────────┌───────────┌───────────────────────────────── Parboiled1JsonParser | 73.81 | ▇ Parboiled2JsonParser | 10.49 | ▎ ParserCombinators | 2385.78 | ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 

パヌボむルドができないこず


パヌサコンビネヌタに関するほずんどの蚘事は、PEGが䜕であるか、それが䜕であるか、なぜそれを恐れる必芁があるかに぀いおの培底的な説明から始たりたす。 構成を解析するために、これを完党に理解する必芁はありたせんが、このタむプの文法の制限に぀いお知るこずはただ䟡倀がありたす。 だから、パヌボむルドは基本的にできたせん


次のパヌトでは、カスタムグラマヌがParboiledでどのように蚘述されるかに぀いお説明したす。たた、蚭定ファむルのツリヌのような圢匏の簡単な認識機胜を䜜成したす。

Source: https://habr.com/ru/post/J270233/


All Articles