問題タブ [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.
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)
parsing - Haskell の Parsec ライブラリを使用して、バックアップ付きの再帰降下パーサーを実装できますか?
Haskell の Parsec 構文解析ライブラリを使用して Java のサブセットを再帰降下パーサーとして解析し、Happy のような従来のパーサー ジェネレーター ソリューションに代わるものとして検討してきました。Parsec は非常に使いやすいようで、解析速度は私にとって重要な要素ではありません。しかし、Parsec を使用して「バックアップ」を実装することが可能かどうかは疑問に思っています。これは、使用する正しいプロダクションを 1 つずつ順番に試して見つける手法です。簡単な例として、JLS Java 文法の最初の部分を考えてみましょう。
解析を成功させるために、これら 2 つのルールをどのように順序付ける必要があるかを理解する必要がないようにしたいと考えています。現状では、次のような単純な実装です。
機能しません...「15.2」のような入力により、最初に整数パーサーが成功し、次に「。」で全体がチョークします。シンボル。この場合、もちろん、2 つのプロダクションを並べ替えることで問題を解決できることは明らかです。ただし、一般的なケースでは、このようなものを見つけるのは悪夢であり、いくつかのケースを見逃す可能性が非常に高い. 理想的には、Parsec にこのようなことを理解してもらう方法が欲しいです。これは可能ですか、それとも単にライブラリを使いすぎているのでしょうか? Parsec のドキュメントには、「文脈依存の無限先読み文法を解析する」ことができると書かれているので、ここで何かできるはずだと思われます。
haskell - many1 は Parsec 3.x では動作しなくなりました
Parsec 2.x から 3.1 にアップデートした後、many1 を使用するコードは次のようにword = many1 letter
失敗します:
ソースファイルの先頭に追加すると問題が解決すると主張するメーリングリストの投稿を見つけました{-#LANGUAGE NoMonomorphismRestriction #-}
が、そうではありませんでした。
parsing - HaskellParsecを使用したカスタムwhiteSpace
パーセクを使用makeTokenParser
してパーサーを構築したいのですが、独自の定義を使用したいと思いますwhiteSpace
。次の手順を実行すると、私の定義が置き換えwhiteSpace
られますが、すべてのlexeme
パーサーは引き続き古い定義を使用します(たとえばP.identifier lexer
、古いwhiteSpaceを使用します)。
のコードを見ると、makeTokenParser
なぜこのように機能するのか理解できたと思います。コードを完全に複製しないようにするための回避策があるかどうかを知りたいですmakeTokenParser
か?
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つ以上のレベルにすることができます。
ありがとう!
parsing - Haskell Parse Paragraph および Parsec を使用した em 要素
私はText.ParserCombinators.ParsecとText.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>
このコードは、強調された要素を解析して返します
しかし、強調項目のある段落を取得する方法がわかりません
何か案は?
ありがとう!!
html - Haskell - パーセク解析エレメント
私はText.ParserCombinators.ParsecとText.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>
なにが問題ですか?何か案は?
ありがとう!
parsing - Haskell Parsecアイテムの数え方
私はText.ParserCombinators.ParsecとText.XHtmlを使用して、次のような入力を解析しています。
そして、私の出力は次のようになります。
私はこの部分に来ましたが、それ以上進むことはできません:
これは問題ありませんが、番号付けは含まれていません。
何か案は?
ありがとう!
parsing - HaskellのParsecでのインデントベースの構文の解析
私はParsecを使用してHaskellでインデントベースの言語(Python、Haskell自体、Boo、YAMLを考えてください)を解析しようとしています。IndentParserライブラリを見たことがあり、完全に一致しているように見えますが、私が理解できないのは、自分TokenParser
をインデントパーサーにする方法です。これが私がこれまでに持っているコードです:
これはエラーをスローします:
私は何が間違っているのですか?どうすれば作成できますIT.TokenParser
か?または、IndentParserが壊れていて、回避する必要がありますか?
parsing - Haskell: 読み取り関数を parsec パーサーに持ち上げる
ここでの 4 番目の演習の一部として、 parsecreads
など
の型関数を使用したいと思います。readHex
Parser
これを行うために、私は関数を書きました:
たとえばGHCIでは、次のように使用できます。
次の点に関して、このアプローチの改善を誰でも提案できますか?
(f s)
れた場合に 2 回評価されますか?
null (f s)
False
length (f s)
が 1 より大きい場合、parsec がこれをどのように処理するかわかりません。
(snd . head) (f s)
.