問題タブ [parsec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
936 参照

haskell - カスタム トークン データ型を持つ parsec-3.1.0

parsec-3.1.0 ( http://hackage.haskell.org/package/parsec-3.1.0 ) は、どのトークン タイプでも機能します。ただし、Char データ型に対してのみ定義されている Text.Parsec.Char.satisfy のようなコンビネータがあります。これ以上一般的なものはないようです。

独自のバージョンを定義する必要がありますか、それとも何か見逃していましたか?

おそらく、Haskell には次のことを可能にするさまざまなパーサー ライブラリがあります。

  • カスタム トークン タイプ
  • カスタム パーサーの状態 (ステートフル フォーマットを解析する必要があります - Wavefront OBJ)
0 投票する
2 に答える
1723 参照

parsing - Haskell の Parsec ライブラリを使用して、バックアップ付きの再帰降下パーサーを実装できますか?

Haskell の Parsec 構文解析ライブラリを使用して Java のサブセットを再帰降下パーサーとして解析し、Happy のような従来のパーサー ジェネレーター ソリューションに代わるものとして検討してきました。Parsec は非常に使いやすいようで、解析速度は私にとって重要な要素ではありません。しかし、Parsec を使用して「バックアップ」を実装することが可能かどうかは疑問に思っています。これは、使用する正しいプロダクションを 1 つずつ順番に試して見つける手法です。簡単な例として、JLS Java 文法の最初の部分を考えてみましょう。

解析を成功させるために、これら 2 つのルールをどのように順序付ける必要があるかを理解する必要がないようにしたいと考えています。現状では、次のような単純な実装です。

機能しません...「15.2」のような入力により、最初に整数パーサーが成功し、次に「。」で全体がチョークします。シンボル。この場合、もちろん、2 つのプロダクションを並べ替えることで問題を解決できることは明らかです。ただし、一般的なケースでは、このようなものを見つけるのは悪夢であり、いくつかのケースを見逃す可能性が非常に高い. 理想的には、Parsec にこのようなことを理解してもらう方法が欲しいです。これは可能ですか、それとも単にライブラリを使いすぎているのでしょうか? Parsec のドキュメントには、「文脈依存の無限先読み文法を解析する」ことができると書かれているので、ここで何かできるはずだと思われます。

0 投票する
1 に答える
486 参照

haskell - many1 は Parsec 3.x では動作しなくなりました

Parsec 2.x から 3.1 にアップデートした後、many1 を使用するコードは次のようにword = many1 letter失敗します:

ソースファイルの先頭に追加すると問題が解決すると主張するメーリングリストの投稿を見つけました{-#LANGUAGE NoMonomorphismRestriction #-}が、そうではありませんでした。

0 投票する
1 に答える
978 参照

parsing - HaskellParsecを使用したカスタムwhiteSpace

パーセクを使用makeTokenParserしてパーサーを構築したいのですが、独自の定義を使用したいと思いますwhiteSpace。次の手順を実行すると、私の定義が置き換えwhiteSpaceられますが、すべてのlexemeパーサーは引き続き古い定義を使用します(たとえばP.identifier lexer、古いwhiteSpaceを使用します)。

のコードを見ると、makeTokenParserなぜこのように機能するのか理解できたと思います。コードを完全に複製しないようにするための回避策があるかどうかを知りたいですmakeTokenParserか?

0 投票する
1 に答える
573 参照

html - ParsecHaskellリスト

入力を解析してHTML出力を取得するためにText.ParserCombinators.Parsecとを使用しています。Text.XHtml

私の入力が次の場合:

私の出力は次のようになります。

<ul><li>First item, First level <ul><li>First item, Second level </li><li>Second item, Second level </li></ul></li><li>Second item, First level</li></ul>

私はこれを書きましたが、明らかに再帰的には機能しません

何か案は?再帰は3つ以上のレベルにすることができます。
ありがとう!

0 投票する
1 に答える
376 参照

parsing - Haskell Parse Paragraph および Parsec を使用した em 要素

私はText.ParserCombinators.ParsecText.XHtmlを使用して、次のような入力を解析しています。

this is the beginning of the paragraph --this is an emphasized text-- and this is the end\n

そして、私の出力は次のようになります。

<p>this is the beginning of the paragraph <em>this is an emphasized text</em> and this is the end\n</p>

このコードは、強調された要素を解析して返します

しかし、強調項目のある段落を取得する方法がわかりません

何か案は?

ありがとう!!

0 投票する
2 に答える
697 参照

html - Haskell - パーセク解析

エレメント

私はText.ParserCombinators.ParsecText.XHtmlを使用して、次のような入力を解析しています。

そして、私の出力は次のようになります。

<p>This is the first paragraph example\n with two lines\n</p> <p>And this is the second paragraph\n</p>

私は定義しました:

しかし、次のように返されます。

<p>This is the first paragraph example\n with two lines\n\n And this is the second paragraph\n</p>

なにが問題ですか?何か案は?

ありがとう!

0 投票する
1 に答える
399 参照

parsing - Haskell Parsecアイテムの数え方

私はText.ParserCombinators.ParsecText.XHtmlを使用して、次のような入力を解析しています。

そして、私の出力は次のようになります。

私はこの部分に来ましたが、それ以上進むことはできません:

これは問題ありませんが、番号付けは含まれていません。

何か案は?

ありがとう!

0 投票する
2 に答える
2656 参照

parsing - HaskellのParsecでのインデントベースの構文の解析

私はParsecを使用してHaskellでインデントベースの言語(Python、Haskell自体、Boo、YAMLを考えてください)を解析しようとしています。IndentParserライブラリを見たことがあり、完全に一致しているように見えますが、私が理解できないのは、自分TokenParserをインデントパーサーにする方法です。これが私がこれまでに持っているコードです:

これはエラーをスローします:

私は何が間違っているのですか?どうすれば作成できますIT.TokenParserか?または、IndentParserが壊れていて、回避する必要がありますか?

0 投票する
2 に答える
861 参照

parsing - Haskell: 読み取り関数を parsec パーサーに持ち上げる

ここでの 4 番目の演習の一部として、 parsecreadsなど の型関数を使用したいと思います。readHexParser

これを行うために、私は関数を書きました:

たとえばGHCIでは、次のように使用できます。

次の点に関して、このアプローチの改善を誰でも提案できますか?

  • 用語がメモ化されるか、または が返さ(f s)れた場合に 2 回評価されますか? null (f s)False
  • 複数の成功した解析の処理、つまりlength (f s)が 1 より大きい場合、parsec がこれをどのように処理するかわかりません。
  • 解析の残りの処理、つまり(snd . head) (f s).