問題タブ [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 投票する
2 に答える
120 参照

parsing - 解析中にさまざまなタイプの用語を分割する

異なるタイプの用語に対して2つのパーサーがあります。

これらの用語のシーケンスを表すデータ型があります。

私の入力が一連の混合用語である場合、 sをsからc :: Parser C分離し、それらの順序を維持するための良い書き方は何ですか?たとえば、次の定義があります。AB

"abAbBBA"aAAシーケンスとを解析しbbBBます。使用する必要があると感じていますStateTが、詳細がわからないため、正しい方向にプッシュする必要があります。

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

haskell - パーサーは行をスキップします

Jadeのサブセット用の単純なパーサーを作成し、さらに処理するためにいくつかのXmlHtmlを生成したいと考えています。

パーサーは非常に単純ですが、Parsecと同様に少し長くなります。このような長いコードの投稿を許可されているかどうかわからないので、ここに完全な動作例があります。

以前に Parsec に手を出したことがありますが、成功することはめったにありません。今のところ、次の行を飲み込むように見える理由がよくわかりません。たとえば、

でテストするとparseTest tag txt、次のように返されます。

私のパーサーは、あらゆる種類のネストを処理できるようですが、複数の行を処理することはできません。私は何を取りこぼしたか?

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

parsing - オフセットとしてのパーセク位置

Parsecを使用して、位置をオフセットとして(入力の開始からの文字として)簡単に取得できますか?もしそうなら、どのように?内部的には、Parsecは、ソース名、行、および列を持つデータ型としての位置を保持します。

次のようなパーサーを記述できるようにしたいと思います

これは、パーサーpを使用して何かを解析し、その結果と、その左右の位置をオフセットとして返します。

alex(字句アナライザジェネレータ)たとえば、絶対文字オフセット、行番号、および列番号を保持する位置を処理します。パーセクの絶対文字オフセットがありません。

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

haskell - Parsec.Exprの繰り返しプレフィックス/ポストフィックス演算子はサポートされていません

のドキュメントは次のようにParsec.Expr.buildExpressionParser述べています。

同じ優先順位のプレフィックス演算子とポストフィックス演算子は1回だけ発生します(つまり、-がプレフィックス否定の場合、-2は許可されません)。

実際、これは私を苦しめています。なぜなら、私が解析しようとしている言語では、接頭辞と接尾辞の演算子を任意に繰り返すことができるからです(のようなC式を考えてみて**a[1][2]ください)。

では、なぜParsecこの制限を設けるのでしょうか。また、どうすれば回避できますか。

プレフィックス/ポストフィックスパーサーは優先順位が最も高いため、パーサーに移動できると思いますterm

すなわち

として解析されます

しかし、次のように解析したい場合はどうすればよいでしょうか。

buildExpressionParserやりたいことがあれば、テーブル内の演算子の順序を簡単に並べ替えることができます。

より良い解決策については、ここを参照してください

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

haskell - Parsecでのタイプエラー

私はParsec3.1.2とGHC7.4.1を使用して、やや毛むくじゃらのデータファイル形式のパーサーを作成しようとしています。かなり些細なケースだと思いますが、タイプエラーが発生します。RealWorldHaskellの適用可能なファンクターの例に従おうとしています。

さて、もともと私は次のタイプエラーを受け取りました:

Trivial parsecの例に基づいて、型エラーが発生しますNoMonomorphismRestriction。言語プラグマを追加しようとしましたが、これは役に立ちませんでした。

Haskellの経験は少しありますが、Parsecの学習曲線はかなり急であることがわかりました。RealWorldHaskellの本の例がParsec2に基づいていることは役に立ちません。

0 投票する
3 に答える
1759 参照

haskell - Parsecに`read`:: Intを呼び出させるにはどうすればよいですか?

私は次のものを持っています、それはタイプチェックです:

さて、関数名が示すように、私はそれが私にIntを与えることを望みます。しかし、私がこれを行う場合:

このタイプのエラーが発生します:

空白を含む可能性のある整数を解析するためのより簡単でクリーンな方法はありますか?またはこれを修正する方法は?

最終的に、これを次の一部にしたいと思います。

これは、次のような行を解析することです。

したがって、最終的には、これらの値を必要とするBetaPairコンストラクターを呼び出すことができます(一部はInt、一部は[Exposure]やParallelなどの他のタイプ)

(興味があれば、これは、とりわけ、タンパク質の水素結合したベータストランドペアを表すファイル形式のパーサーです。ファイル形式を制御することはできません!)

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

haskell - パーセク型の問題

特定の計算生物学のファイル形式用のパーサーを作成しているときに、問題が発生しました。

これが私のコードです:

ここで、betaLine の定義をコメント アウトすると、すべてがコンパイルされ、個々のパーサー p_int、p_direction、および p_exposure のテストに成功しました。

しかし、その betaLine 方程式が存在する場合、よく理解できない型エラーが発生します。applicative <*> の私の理解は間違っていますか? 最終的には、これが Int -> Int -> Int -> Int -> Direction -> ExposureList を返すようにしたいので、これを BetaPair のコンストラクターに渡すことができます。

タイプエラーは次のとおりです。

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

haskell - 行末のパーセクトラブル

私はほとんどアプリケーションスタイルで書いているParsecパーサーを持っています。あるケース(私が使用しているのはsepBy)で、eolパーサーに問題があります。まず、いくつかの定義:

注:betaLine完全に機能します(簡潔にするために、次の定義p_intなどは省略しました。

この他のパーサーで問題が発生しますhmmMatchEmissions

ここで<* eol、パーサー定義からを削除\nし、行からを削除すると、機能します。

では、なぜeol機能しているのに機能してbetaLineいないのhmmMatchEmissionsですか?

これが私が使用している唯一の場所であることに注意しsepByます; それが手がかりになりますか?

更新:私は次のことを行いましたが、今では別の方法で失敗します:/

そして、ここに失敗があります:

010列目の予期しない文字が0.124トークンの最初の文字であることに注意してください。

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

haskell - int を処理するための Parsec 先読み

私はやや複雑なデータ ファイル形式を処理するために Parsec パーサーに取り組んでいます (この形式を制御することはできません)。

私は多くの進歩を遂げましたが、現在、次のことで立ち往生しています。

次のような行を解析できる必要があります。

意味的には、4は nodeNum であり、Floats*は負の対数確率です (したがって、*確率ゼロの負の対数を表します)。と149マイナス記号は本当に迷惑なので破棄しても構いませんが、少なくともパーサーを壊さないようにする必要があります。

これが私がこれまでに持っているものです:

これは、私が言及した「ジャンク」を処理します。おそらくもっと単純かもしれませんが、それ自体で機能します。

行のnodeNum先頭にある は、機能する別のパーサーによって処理されるため、私が入る必要はありません。

問題はp_logProbemAnnotationSet.

のパーサーはp_logProb次のようになります。

そして最後に、次のようにlogProbエントリを末尾emAnnotationSet(整数で始まる) から分離しようとします。

そのp_logProbため、数字で始まり、小数点を含み、さらに数字を持つ float でのみ成功します (この制限はファイル形式によって尊重されます)。

小数点以下を解析しない場合try、定義内のが先頭の数字を消費しないようにすることを望んでいましたが、これは機能していないようです。p_logProbParsec は、その整数の数字の後に予期しないスペースがあるとまだ不平を言っていますemAnnotationSet

列 196 は、マイナス記号の前の整数の後のスペースに対応しているため、p_logProbパーサーが整数を消費していることに問題があることは明らかです。p_logProbパーサーが先読みを正しく使用して、その入力をパーサーに残すようにするにはどうすればよいemAnnotationSetですか?

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

haskell - Haskell パーセク解析から多分

私には解けない素朴な疑問。

文字列を String または Maybe Double として解析したいのですが、空の文字列または "n/a" は Nothing として解析されます。たとえば、次のようなものです。

v_nothing (および先頭とトレーニングの空白) に問題があります。

ありがとう。

編集:

v_nothing に対してあらゆる種類のことを試しましたが、役に立ちませんでした。