問題タブ [uu-parsinglib]

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 に答える
116 参照

performance - 一部のルールが有効になっていると、UU-Parsinglib が大幅に遅くなる

を使用してコンパイラを書いていuu-parsinglibますが、非常に奇妙なことがわかりました。pChoice次のようなコンビネータを定義しました。

(注意、私は greedy を使用して<<|>います)。

次のコードを考えてみましょう。

各要素は異なる文字でExpr.Var始まります - 文字、Expr.Lit数字、L.pParensed括弧(、中Expr.Tuple括弧{Expr.List括弧で始まり[ます。

タプルもリストもない大きなテスト コードがあります。コードは で解析され0.15sます。上記の行のコメントを外すと、時間が に増加し0.65sます。これは 400% を超える速度低下です...どのように可能でしょうか? 私は貪欲な演算子のみを使用しており、コード全体にタプルもリストもないため、パーサーがセクションにTupleもハニングしていないと確信しています。List

さらにコードや定義が必要な場合は、もちろん投稿します。

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

parsing - パーサーコンビネータ (左再帰) を使用した関数適用を持つ式文法の解析

実際の言語のパーサーの単純化された部分問題として、標準の命令型言語 (Python、JavaScript など) に似た架空の言語の式のパーサーを実装しようとしています。その構文には、次の構造があります。

  • 整数
  • 識別子 ( [a-zA-Z]+)
  • +and*と括弧を使用した算術式
  • を使用した構造アクセス.(例: foo.bar.buz)
  • タプル (例: (1, foo, bar.buz)) (あいまいさをなくすため、1 タプルは のように記述します(x,))
  • 関数の適用 (例foo(1, bar, buz()))
  • 関数はファーストクラスであるため、他の関数から返して直接適用することもできます(たとえば、関数を返す可能性があるfoo()()ため合法です)foo()

したがって、この言語のかなり複雑なプログラムは

結合性は

私は現在、非常に優れuu-parsinglibたアプリカティブ パーサー コンビネーター ライブラリを使用しています。

最初の問題は明らかに、直感的な式の文法 (が左再帰的であることです。しかし、コンビネータexpr -> identifier | number | expr * expr | expr + expr | (expr)を使用してその問題を解決できました (以下の例を参照)。pChainlparseExpr

残りの問題 (したがって、この質問) は、他の関数 ( f()()) から返された関数を使用した関数の適用です。繰り返しますが、文法は recursive のままexpr -> fun-call | ...; fun-call -> expr ( parameter-list )です。を使用してこの問題をエレガントに解決する方法はありuu-parsinglibますか? parsec(この問題は、attoparsecおよび他のパーサー コンビネーターにも直接適用されるはずです)。

以下の私の現在のバージョンのプログラムを参照してください。それはうまく機能しますが、関数の適用は識別子に対してのみ機能し、左再帰を削除します。

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

haskell - Parsec は uu-parsinglib で同等のものを満たしています

satisfyParsec のような機能を探しています。何かのようなもの:

私が見つけた唯一のものは、 as 引数を必要とするpSatisfyです。Insertionなぜこれが必要なのかわかりません...述語が満たされない場合にパーサーが失敗するようにしたいだけです!

どうすればこれを達成できますか?

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

haskell - 空の文字列入力だけを認識する UU パーサー?

空 (長さ 0) の入力でParser ()成功し (そして を返し)、他のすべての場合に失敗するtype の値が必要です。()

pSatisfy (const False)必要なことを十分に行っていません。pEndこの目的には適切とは思えません。


pExact 0 pAscii正確な「定義による」ソリューションかもしれません。まだ動作していないようです:

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

haskell - uu-parsinglib を使用して一連の Word8 を解析する

[Word8][Char] ではなく、uu-parsinglib を使用して操作しようとしています。(エラー報告に uu-parsinglib を使用したい。)Word8それが何であれ、シーケンスの次のものを取得するパーサーが必要です。それができたら、より複雑なパーサーを作成できます。でも、書き方が分からなくて困っています。私が得ることができた最も近いものは次のとおりです。

ただし、その実装は明らかに間違った型を返します。

の型シグネチャがどのように aではなくpSatisfya を返すように制限しているのかわからないので、これは私を驚かせます。CharWord8

どうすれば実装できpRawWord8ますか?