問題タブ [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
典型的な正規表現の機能と同様に、parslet の前の文字列を後方参照する方法はありますか?
次のようなブロック内の文字を抽出したい:
「Marker」は既知の文字列ですが、「SomeName」は事前に知られていないため、次のようなものが必要だと思います。
私が知らないのは、Parslet や Ruby 言語を使用して backreference_to_name ルールを記述する方法です。
ruby - デリミタが存在するまでのパースレット単語
私はルビーとパースレットから始めたばかりなので、これは他の人には明らかかもしれません(うまくいけば)。
消費せずに区切り文字(^)まで全ての単語を取得したい
次のルールは機能します (ただし、区切り文字を消費します)。{:wrd=>"otherthings"@0, :delim=>"^"@11}
「プレゼント?」を使おうとしていたのですが、
しかし、これは例外をスローします:
後の段階で、区切り記号の右側にある単語を調べて、より複雑な文法を構築する必要があるため、区切り記号を使用したくありません。
パースレット 1.5.0 を使用しています。
ご協力いただきありがとうございます!
ruby - Parsletでアトムを分割するにはどうすればよいですか?
SQL に似たクエリ言語を構築しています。コンマで区切られたアイテムのリストを処理できるようにしたいと考えています。私はこのコードでこれを成功裏に達成しました:
のようなものがツリーをSELECT id,name,fork FROM forks
正しく出力する場所。{:select=>"id,name,fork"@7, :from=>"forks"@25}
SELECT
さて、後でこれをいじる代わりに、引数 (id,name,fork
この場合) を配列に変換できるようにしたいと思います。実行することでこれを行うことができます'id,name,fork'.split ','
。適用時にParsletトランスフォーマーにこれを実行させることができません。これは私のクエリトランスフォーマーのコードです:
次のように適用すると:
結果は、適用しなかった場合と同じです: {:select=>"id,name,fork"@7, :from=>"forks"@25}
.
私が望ん:select
でいた値は、このような配列["id","name","fork"]
です。
私の質問は次:select
のとおりです。トランスフォーマーを使用して値を配列に分割するにはどうすればよいですか?
ruby - 空の文字列リテラルを解析するときにParslet(Ruby)が空の配列を返すのはなぜですか?
パースレットで遊んでいます。これは自明ではない動作を示す単純なパーサーです。
明らかに、二重引用符で囲まれた文字列を解析する必要があります。そして、そうです。しかし、次の結果は私にとって奇妙に思えます。
このコードは を返します{:string=>[]}
。なぜempty array
そこにないempty string
のですか?私は何が欠けていますか?
私は使用ruby 2.1.1
していますparslet 1.6.1
ruby - オプションのスペースを含むルール内でパーサー アトムを終了させるにはどうすればよいですか?
アトムを個別に解析することはできますが、パーサーを使用してそれらを連鎖させると、ルール>>
を離れたくないようです。:integer
次のエラーが表示されます。
次のコードを実行する場合:
ruby - Ruby: プログラム内でコード行を生成する方法は?
parsletライブラリを使用して Ruby でパーサーを開発しています。
私が解析している言語には、次のような単一の解析ルールにマージできる多くのキーワードがあります。
すべてのキーワードを含むテキスト ファイルを読み取ることによって、この一連のコード行を動的に生成する良い方法はありますか? これにより、パーサーをクリーンで小さく保ち、コードを変更せずに新しいキーワードを簡単に追加できるようになります。
内部に埋め込みたいものの擬似コードは、次のrule(:keyword)
ようなものになります。
これまでのところ、私が見つけた回避策は、パーサー コードを次のようにロードする別の ruby プログラムを用意することです。
パーサー コードには次の行があります。
これを達成するためのよりエレガントな方法はありますか?
ruby - Parslet: 特定のキーワード以外のものを認識します
Handlebars 用の Ruby/Parslet パーサーを作成しようとしていますが、{{ else }}
キーワードに行き詰まっています。ハンドルバーを使用しない人のために簡単に説明すると、if/else は次のように記述されます。
ただし、インライン化とヘルパーが同じ構文を使用できるため、注意が必要です。次に例を示します。
そこで、最初に置換を認識するルールを作成しました。
{{name}}
またはのようなものに一致し{{people.name}}
ます。{{ else }}
もちろん問題は、それがブロックとも一致することです。if/else ブロックに一致するルールを作成した方法は次のとおりです。
(注: docurly は{{
、dccurly は}}
、 block は多かれ少なかれ何でもかまいません)
したがって、「識別子」ルールを書き直して、「else」ではなく任意の単語に一致するようにする必要があります。
前もってありがとう、ヴィンセント
ruby - マークダウンのインデントされたコード ブロックを解析する
Parslet で記述された文法を使用して Markdown を解析しようとしています。ただし、これまで試したことはすべて再帰でスタックしたため、インデントされたコード ブロックを通過できません。それらは次のようになります。
\n
これを解決するために、行 ( を含む) を空白行 ( ) に置き換え、a
空白行 ( \n\n
) をスペースに置き換える最小限の例を書きましたa aaa aa
。
ランニングは問題なくrspec recurring_group_parser.rb
動作します。改行を元に戻すと、停止します:
これを単純化するために、行は 1 つのみで構成でき、a
インデントされていませんが、後で簡単に変更でき、解析の失敗とは関係ありません。chunk.absent?
inrule :blank_line
とany.absent?
inの間に衝突があることも確信していますが、rule :newline
これを修正して再帰を中断する基準を提供する方法がわかりません。どんな助けが欲しい!