問題タブ [parslet]
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.
ruby - parslet で固定幅制約を定義する方法
多くのデータインポートコードを書くためにパースレットを調べています。全体として、ライブラリは良さそうに見えますが、1 つ苦労しています。入力ファイルの多くは固定幅であり、実際のフィールドがそうでない場合でも、幅はフォーマット間で異なります。たとえば、9 文字の通貨を持つファイルと、11 文字 (またはその他) の別のファイルを取得する場合があります。パースレットアトムに固定幅の制約を定義する方法を知っている人はいますか?
理想的には、通貨を理解するアトムを定義できるようにしたいと考えています (オプションのドル記号、千単位の区切り記号などを使用)。そして、その場で、古いアトムに基づいて新しいアトムを作成できるようになります。これは、正確に N 文字を解析することを除いて、まったく同じです。
そのようなコンビネータはパースレットに存在しますか? そうでない場合、自分で書くことは可能/困難ですか?
ruby-on-rails - MVC に格納する前に解析する
データの解析と、ユーザーが指定した文字列からの構造の取得 (主に数字と都市名の抽出) を開始しています。
Ruby インタープリターで少しコードを実行しましたが、今度はその同じコードを Web アプリケーションで使用したいと考えています。
コードのどこで解析を行うべきか、またはどのように構造化されているかについて苦労しています。
私の最初の本能は、それがデータ ロジックであるため、モデルに属しているということでした。たとえば、エントリに整数があるか、2 つの整数があるか、都市名があるかなどです。
ただし、私のモデルは ActiveRecord と Parslet (解析用) の両方を継承する必要があり、Ruby は多重継承を許可していないようです。
私の現在のモデルはこのように見えます
実際にはそれほど多くはありませんが、構造が間違っていて、これら 2 つの部分を接続する方法がわからないため、行き詰まっていると思います。
元の文字列と解析されたデータのコンポーネントを保存しようとしています。
ruby - Parslet : 除外節
Treetop や Citrus よりもはるかに使いやすいと思うので、現在、Ruby を使用して Ruby パーサーを作成しています。より正確には Parslet を使用しています。私は公式の仕様を使用してルールを作成していますが、一部の構文を「除外」しているため、記述できないステートメントがいくつかあり、その方法がわかりません... さて、理解するための例を次に示します。 ..
基本的なルールは次のとおりです。
Parslet を使用してどのように翻訳できますか? たぶん不在?/現在?もの ?
どうもありがとう、誰かがアイデアを持っていることを願っています....
良い1日を!
編集:私はあなたが言ったことを試したので、これが私のパーレットを使用したRuby言語への翻訳です:
ただし、機能していないようです (括弧内のシーケンス)。私はいくつかのテストを行い、括弧に書かれていることが間違っているという結論に達しました。
これは非常に簡単な例です。これらのルールを考えてみましょう:
私はこれらのルールをこのコードで使用します:
しかし、私はそれを取得します:
行 2 の文字 1 でシーケンス (SOURCE_CHARACTER{0, } LINE_TERMINATOR)
- Failed to match sequence (SOURCE_CHARACTER{0, } LINE_TERMINATOR) at line 2 char 1.
の一致に失敗しました。 - 行 2 の文字 1 でシーケンス (' ' ' '?) の一致に失敗しました。
このシーケンスが機能しない場合、そこにある私の「完全な」ルールは機能しません...誰かがアイデアを持っているなら、それは素晴らしいことです.
ありがとうございました !
ruby - 代替のParslet文字列全体を解析しない
私は次のスペックを持っています
次のParsletパーサーの場合
最初の2つのテストは問題なく合格put
し、コマンドラインにそれらを送信することで、アトムが正しいタイプであることがわかります。ただし、式とプレーンテキストの両方を含むドキュメントを解析しようとすると、プレーンテキストの解析に失敗し、次のエラーが発生します。
:documentルールの定義に関して何かが足りないと思います。私が欲しいのは、シーケンス式とプレーンテキストをいくつでも消費するものです。私が持っているルールでは、各アトムを個別に消費しますが、両方を同じ文字列で使用すると失敗します。
ruby - rubyのparsletを使用して、固定幅の列を持つツリーとして構造化されたテキストを解析する
私は立ち往生しています。数日間、このテキストを解析しようとしていました(下部を見てください)。しかし、いくつかのことを理解することはできません。まず、テキストは固定幅の列を持つツリー構造でフォーマットされますが、正確な列幅は最も広いフィールドによって異なります。
私はrubyを使用しています。最初は、Treetop gemを試し、ある程度の進歩を遂げましたが、Parsletを試すことにしたので、今使っているので、使いやすいようですが、詳細なドキュメントを見つけるのは難しいです。
現在、各行を個別に解析し、解析されたエントリを使用して配列を作成していますが、構造が緩んでいるため、これは正しくありません。それを再帰的に解析し、深さを処理する必要があります。
ヒント、アイデア、提案をいただければ幸いです。
これが私の現在のコードです。動作しますが、すべてのデータがフラット化されます。私の現在の考えは、現在の行の開始位置が前の行の開始位置(つまり幅)よりも大きい場合に再帰的に解析することです。したがって、より深いレベルに進む必要があることを意味します。実はなんとかできたのですが、きちんと外に出られなかったので、そのコードを削除しました。
テキストは次のようになります(https://gist.github.com/davispuh/4726538)
ありがとう :)
ruby - Parslet: SystemStackError: スタック レベルが深すぎます
私は新しいプログラミング言語ripに取り組んでいますが、いくつかの無限ループの底にたどり着くのに苦労しています。再帰的なルールを確認できるように、呼び出されたときに各ルールを出力する方法はありますか? 頭の中でコードを調べてみましたが、わかりません。どんな助けでも大歓迎です。
ruby - RubyでParsletを使用したインデントに敏感なパーサー?
Ruby 内のParsletライブラリを使用して、単純なインデントに依存する構文を解析しようとしています。
以下は、解析しようとしている構文の例です。
結果のツリーは次のようになります。
現在使用しているパーサーは、ネスト レベル 0 および 1 のノードを解析できますが、それ以降は解析できません。
3 つのインデント ノードがネスト レベル 3 の識別子と一致することを期待する動的カウンターが必要であることは明らかです。
このようにParsletを使用して、インデントに敏感な構文パーサーを実装するにはどうすればよいですか? 出来ますか?
ruby - Ruby パースレット: 複数行の解析
複数行のパースレットを一致させる方法を探しています。コードは次のようになります。
ただし、文字列の末尾に一致するように無限に繰り返されるlines
ため、常に無限ループになります。match('$')
空にすることができる複数の行を一致させることは可能ですか?
正常に一致するはずです。何か不足していますか?私も試し(match('$').absent? >> any.maybe).repeat(1) >> match('$')
ましたが、それは空の行と一致しません。
よろしく、
ダニエル。
ruby - Parsletを使用してRubyでCスタイルのコメントを処理するにはどうすればよいですか?
Parslet自身の作成者 (このリンクで入手可能)のコード例を出発点として、C に似た構文で記述されたファイルからコメントなしのすべてのテキストを取得するように拡張する必要があります。
提供された例では、C スタイルのコメントを正常に解析でき、これらの領域を通常の行スペースとして扱います。ただし、この単純な例では、入力例のように、ファイルのコメント化されていない領域に「a」文字のみが必要です。
コメントされていないテキストを検出するために使用されるルールは、次のとおりです。
したがって、次のようなより一般的なファイルから他のすべての (コメントされていない) テキストを取得するために、前のルールを一般化する必要があります。
私は構文解析式文法に不慣れで、以前の試行はどちらも成功しませんでした。