問題タブ [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.

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

ruby - Treetop は単純な文法 (5 つのルール) で失敗するようです

C のサブセット用のパーサーを作成しようとしています。

この単純な (さらに簡略化された) 文法では、treetop の動作を分析するのは困難です。

私のテストケースは「int main(){}」です

そしてツリートップからのエラーメッセージは次のとおりです。

したがって、問題は識別子ルールに関するものです...

treetop のバージョン: 1.5.3 および Ruby 2.1.1

何か案が ?

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

ruby-on-rails - 入力を任意の順序で解析する Treetop ルールの記述

任意の順序でいくつかの値を見つける Treetop ルールを作成する方法を探しています。そう:

これらの入力を解析したいと思います:

どうすればこれを達成できますか? ありがとう

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

ruby - 役に立たない出力を提供する Treetop パーサーのエラー処理メカニズム

私は最近、クライアントの 1 人のために CFG DSL 言語用の単純なパーサーを作成するために Treetop を試しています。彼が必要とするすべての機能を実装することに成功しましたが、Treetop での作業は非常に苦痛な経験でした。

問題は、Treetop から使用可能なエラー メッセージを取得できなかったことです。私が得ている唯一の出力は

これは常にファイルの最初の文字を指します。これは、解析された言語でエラーを見つけるのは本当にひどいことです。何が問題なのかがまったく見つからない場合、パーサーを段階的に開発するにはどうすればよいですか?

再帰規則を含むように文法を変更しようとしました。これにより、パーサーができるだけ早く AST ノードを作成するのに役立つと考えたのですが、役に立ちませんでした。

私の質問は次のとおりです。私は何か間違ったことをしていますか? 部分的に派生したツリーで意味のあるエラー メッセージを表示する Treetop 用の PEG 文法を作成する方法の良い例はありますか? または、Treetop ライブラリのバグ/エラーですか?

ご意見ありがとうございます。

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

ruby-on-rails - 単純なツリートップ パーサーから日付部分を取得する: 引数の型が間違っているクラス (モジュールが必要)

次のツリートップ グラマーでは、'3/14/01' を ( t = Parser.parse('3/14/01')irb 経由で) 解析すると、"TypeError: 間違った引数の型のクラス (期待されるモジュール)" が発生します。

まず<MonthLiteral>、と<DayLiteral>クラス参照をコメントアウトすると、すべて問題ありません。をコメントアウトして<DateMDY>、それらの Literal オブジェクトをそのままにしておくと、エラーも発生します。コメントアウト<YearLiteral>は問題ではないようです (動作するかどうかに関係なく)。これは、最初の 2 つは非終端記号であるため、それらの要素を生成できないことを示しているようです。

Ruby (またはツリートップ) がこれらのクラスをインスタンス化する方法や、何が起こるかを説明する AST 生成について、私が理解していないことが明らかにあります。<MonthLiteral>オブジェクトを生成できない理由、またはオブジェクトを生成できない理由を理解するのに役立つ何かを説明または指摘できます<DayLiteral>か?

第二に、これは行き過ぎた橋かもしれませんが、私が本当に望んでいるのは、DateMDY月、日、年の 3 つの属性を持つオブジェクトを取得Timeすることto_timeですDateMDY。現時点では、構成要素をオブジェクトとして作成するだけで済みます。

そこで、オブジェクトのままにして、 、、および<DateMDY>への参照をコメントアウトしてみました。(私の元の例では)から返された結果の AST オブジェクトには 2 つのパブリック メソッドがあることがわかりましたが、それらを呼び出すとそれらは nil のように見え (たとえば、)、メソッドがないため、役に立たないようです。私から。<MonthLiteral><DayLiteral><YearLiteral>.parset:day_part:month_partputs t.day_part:year_part

どういうわけDateMDYかその構成部分にアクセスすることは可能ですか?

参考までに、Parser私が使用しているコード自体はツリートップ チュートリアルのかなり標準的なものでありnode_extensions.rb、オブジェクト クラスを定義するものも些細なものですが、それらを見る必要がある場合はそれらも投稿できます。

ありがとう!リチャード

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

ruby - Treetop 文法で、カスタム ノードの代わりに空の文字列が出力されることがあるのはなぜですか?

Treetop の使用に関して、時々修正できない問題が繰り返し発生するので、アドバイスをお願いします。私はおそらく何かが欠けています。

あなたの多くは、それを解決するための適切なイディオムや習慣を持っていると思います。

私は通常、次のように Treetop を使用します。

  1. .tt ファイルで文法を定義します
  2. カスタム解析ツリー オブジェクト (Treetop::Runtime::SyntaxNode を継承する) を出力するように変更します。これらのクラスは「parsetree.rb」ファイルで定義されています。
  3. これらのカスタム オブジェクトには、 再帰的に「純粋な」ツリートップに依存しないクラス (最終的な AST を構成するクラス) に変換するto_astメソッドがあります。そのために、2 つの個別のモジュール (ParseTree と AST) があります。

ただし、通常は修正できない古典的なエラーメッセージが表示されます。

カスタム ノードの 1 つの代わりに空の文字列 "" が出力されているように見えるため、ここで困惑しています。

この例では、この行 380 に次のコードがあります (これは有限ステート マシンに関するものです)。

そして、エラーに関係する私の文法は次のとおりです。