問題タブ [treetop]
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 - ネストされた情報構造を持つプレーンテキストファイルを解析する最良の方法
テキスト ファイルには、これらのエントリが何百もあります (フォーマットは MT940 銀行取引明細書です)。
これは、次のようなハッシュの配列に入る必要があります
ツリートップで試してみましたが、正しい方法ではないようでした.計算をしたいもののためであり、情報が欲しいだけです.
私も正規表現で試しました
しかし、再帰では難しい...
どうすればこの問題を解決できますか?
ruby - ツリートップでプログラムによってルールを「不一致」にすることはできますか?
treetop で ruby コードを使用して検証することにより、ルールをスキップすることは可能ですか?
次のようなものがあるとします。
単語のサイズは 2 ~ 5 文字にしてください。text_value の長さが 2 から 5 の間にない場合、ルールを終了できますか?
ruby - ツリートップ:単一ノードの解析はnilを返します
Treetop解析の基本を習得しようとしています。これが私が言うことができるように非常に簡単な文法ArithmeticParser.parse('2+2').value == 4
です。
解析2+2
は正しく機能し、ノードを返します。ただし、解析2
または22
戻りますnil
。
私は何を取りこぼしたか?
ruby - Treetopパーサー出力のRSpecテストが必要なときに一致しません
私はこの仕様を持っています:
これはこの出力を生成します:
二重引用符を削除すると、次の出力が得られます。
expected_outputに引用符を追加すると、次のようになります:( expected_output = '"## Core\n## Special\n## Omgg\n## Moarheaders\n"'
)
何が起きてる?
\ nを改行として評価するTreetopの結果を取得できません。また、何を試しても、expected_outputを一致させることができません。
よくわかりません。
ruby - ツリートップの文法に問題があり、すべてのオプションが一致しません
私は小さな、本当に単純な Lisp パーサーを ruby で書いて、treetop gem を試してみました。しかし、それは私が望むようにうまく機能していません.ドキュメントはかなり貧弱であるため、私が間違っていることを理解するのは困難です. 現在、文法は記号とブール値の両方に一致しますが、数値には一致しません。ただし、アトム ルールの順序を、たとえば bool / number / symbol に切り替えると、最初の 2 つには一致しますが、最後の 1 つには一致しません。ツリートップ ジェムには、1 つのルールで 2 つのオプションしか持てないという制限はありますか? また、「(3)」のようなものはまだ解析されません。
私の文法は次のとおりです。
チュートリアルで示したように、次のようにテストしています。
ruby - Treetop 文法で Ruby コードを認識する
Treetopを使用して ERB ファイルを解析しようとしています。次のような行を処理できる必要があります。
Treetop は Ruby で書かれていて、あなたは Ruby で Treetop の文法を書いていますが、Treetop には、別のルールを書き出さなくても「ここで Ruby コードを探して、その内訳を教えてください」と言う既存の方法が既にありますか? Ruby 言語のすべての部分? .treetop
文法ファイルで、次のような方法を探しています。
どこruby_code
で Treetop が提供するいくつかのルールによって処理されます。
編集: 他の誰かがRuby-lex を使用して ERB を解析しましたが、彼が行ったことを再現しようとするとエラーが発生しました。rlex プログラムは、パーサー クラスを生成したときに完全なクラスを生成しませんでした。
編集:そうですね、気のめいるようですが、情報をありがとう。:) 私の修士プロジェクトでは、ERB を入力として使用する必要があるテスト ケース ジェネレーターを作成しています。さいわい、私の目的のためには、if
ステートメントやその他の条件文、ループなど、ERB コード内のいくつかのことを認識する必要があるだけです。それと一致する Treetop 文法を考え出すことができると思いますが、Ruby では完全ではないことに注意してください。
ruby - Treetop: ノードのオフセットを取得する
Treetop を使用して小さなプログラミング言語のパーサーを生成しています。
構文解析が成功したら、構文ツリーのセマンティック分析を行いたいと思います。理想的には、(意味的に) 無効なコードに遭遇するたびに、エラーが発生した行を含むエラー メッセージを出力したいと考えています。私はこれが可能であることを知っています
私は次のようなものを手に入れます
基本的に、特定のオブジェクト (またはそのサブクラス)のoffset
属性にアクセスする方法が必要です。SyntaxNode
残念ながら、http://treetop.rubyforge.org/semantic_interpretation.htmlによると、 で利用できるメソッドTreetop::Runtime::SyntaxNode
はterminal?
、nonterminal?
、text_value
およびのみelements
であるため、これを行う組み込みの方法はないようです。
ruby - ruby のツリートップ ペグを使用して debian Packages.gz を解析する
Ruby のツリートップを使用して Packages.gz を開こうとしていますが、キーワードと値を明確にするのに問題があります。これが私のツリートップ文法です:
そして、ここに私のサンプル入力があります:
これはほぼ 100% 機能しますが、URL を調べるときに失敗します。問題は、URL に ":" が含まれていることです。サンプルのホームページ エントリを編集して、「:」を「_」に置き換えると、そのまま表示されます。
これは私の最初の PEG 文法ですが、あいまいさを減らして簡潔にする必要があることがわかります。高度なドキュメントを見て、タグを次のように定義したいと思います
しかし、私はそれが何をしているのか完全には理解していません。タグは、私が意味するように(改行または何も持たない)してはなりません(改行または何もない)。機微は私を逃れる...
その形式に切り替えると助けになりますか?なぜそれが一致しないのか誰かが知っていますか?
ruby - Treetop文法で一致するタグペア
クトゥルフの答えを繰り返したくありませんが、Treetopを使用してHTMLタグの開始と終了のペアを一致させたいと思います。この文法を使用して、開始タグと終了タグを一致させることができますが、ここでは、両方を結び付けるルールが必要です。私は次のことを試しましたが、これを使用すると、パーサーが永久に続行されます(無限ループ)。
これは、TreetopGithubページの再帰的な括弧の例とネガティブな先読みの例に基づいて作成しようとしていました。私が参照した他のルールは次のとおりです。
単一の開始タグまたは終了タグの一致を許可する必要があることはわかっていますが、HTMLタグのペアが存在する場合は、それらをペアとしてまとめたいと思います。それらを私の文法と一致させることによってこれを行うのが最もきれいに見えましたが、おそらくもっと良い方法がありますか?
parsing - Python スタイルのインデント用の PEG
Python/Haskell/CoffeScript スタイルのインデントを処理できる次のパーサー ジェネレーター ( PEG.js、Citrus、Treetop ) のいずれかで、解析式文法をどのように記述しますか。
まだ存在しないプログラミング言語の例:
更新: 上記の例のインタープリターを作成しようとしないでください。私はインデントの問題にのみ興味があります。別の例として、次の構文解析が考えられます。