問題タブ [irony]

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 投票する
3 に答える
1399 参照

parsing - 皮肉な AST 生成で nullreference 例外がスローされる

私は Irony (バージョン Irony_2012_03_15) を使い始めていますが、AST を生成しようとするとすぐに行き詰まりました。以下は、例外をスローする完全に制限された言語です。

最後の行のコメントを外すとすぐに、文法エクスプローラーで、またはテストを解析したいときに NullReferenceException がスローされます。エラーは AstBuilder.cs の 96 行目にあります。

DefaultNodeCreator は、設定されていないデリゲートです。

MarkTransient などで設定しようとしましたが、サイコロはありません。

誰か私がここで浮くのを手伝ってくれませんか? 私はおそらく明らかな何かを見逃しています。ウェブ全体で AST チュートリアルを探しましたが、それがどのように機能するかについての説明が見つからないようです。

前もって感謝します、

ゲルト・ヤン

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

c# - 皮肉な演算子の優先順位と単項演算子

文法を単項演算で動作させるのに問題があります。たとえば、「-5/2」と入力すると、取得したい (-5)/2 ではなく、-(5/2) が取得されます。この特定のケースでは違いは問題ではありませんが、これを修正することは文法にとって重要だと思います。

ただし、1-5/2 が (1-5)/2 ではなく 1-(5/2) として解析されることも重要です。

現在、以下のオペレーターを登録しています。

not 演算子は既に希望どおりに機能していますが、「*」、「/」、および「%」が正しく解釈されるようにするには、「+」および「-」の種類が必要です。 . これをどのように解決すればよいですか?ところで、もっと文法が必要な場合はお知らせください。必要以上のコードをここにドロップする必要はないと思いました。

0 投票する
3 に答える
1713 参照

c# - 皮肉: StartEndSymbol のない StringLiteral

言語を解析するために Irony DSL フレームワークを使用しています。この言語では、ドット (.) やマイナス (-) などの特殊文字が含まれていても、文字列を引用符 (") なしで記述できます。

取得したテキスト ファイルを編集して文字列を引用符で囲むと、問題なく解析できます。ただし、ファイルをそのまま読みたい。StartEndSymbol を設定せずに Irony に文字列を解析させるにはどうすればよいですか?

現在のバージョンの Irony (2012_03_15) を使用しています。

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

c# - C# Irony Parser - すべてが正しいように見えてもファイルを解析しない

私は理解できない皮肉でいくつかのトリッキーな問題を抱えています...

アプリケーションの実行時に行う最初の解析は成功します。

次に、1 つのヒントに従って、LanguageData 変数をグローバル コンテキストに移動しました。それでもすべて問題ありません。しかし、カスタム関数内で Irony パーサーを呼び出し、Irony が提供する c# grammar v3.5 を使用して複数のファイルを解析したいと考えました (LINQ クエリは私にとって重要ではないため、それで十分だと思われます)。同じアプローチ:

しかし、現在、parseroot は「null」のままです。そして、私にはその理由がまったくわかりません。先ほどパーサーのエラーもチェックしたところ、理解できないエラーが見つかりました。

しかし、私のファイルは次のようになります。

私のコードのどこが間違っているかわかるといいのですが...私はこのことに必死になっています...

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

c# - 検索における「and」と「or」の問題

私は現在、検索システムの一部として Irony を使用しており、誤った構文に関して数え切れないほどの問題を抱えていましたが、それらを大幅に絞り込むことができましたが、特定のキーワードに関連しているように見える最後の問題に行き詰まっています。

「or」または「and」の後に何かが続くものを検索すると、SQL 検索文字列で構文エラーが返されます。

他の問題については、不正な文字を単にエスケープするか、検索から完全に削除しましたが、これらの単語が検索の一部である可能性があるため、これは実行可能な解決策ではないようです.

Irony へのリンク: http://irony.codeplex.com/

ユニオンが文字列に追加されると、異常が発生してエラーがスローされ、エラーが最後の行に表示されます。

実際のエラーは次のとおりです。

他の問題が現在どのように解決されているか。

エラーが発生したときの実際のクエリは次のとおりです。

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

c# - 文字列に「または」を含めると構文エラーが発生する

私は現在、検索プロセスの一部としてIronyを使用しています(私の選択ではなく、:Pとは言えません)。文字「または」の後にスペースと別の単語「IE」を組み合わせて使用​​すると問題が発生します。ただし、「Orbit Gum」を検索すると、「orbit」や単に「or」などを検索すると、問題なく機能するようです。

発生するエラーは

この部分を生成するために使用されているコードは

私が見る限り、問題を引き起こしている実際のクエリは次の行です。

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

c# - Irony.NET-演算子としての文字

Irony .NETを使用して、かなり複雑なサイコロを振る命令を処理するための単純なDSLを作成しようとしています。基本的な計算機の機能は、実装するのに十分シンプルでした(加算、減算など)。ところが、ようやくロール式の追加に取り掛かったところ、困りました。理想的には、ロール式を次の形式にします。ndmここで、nはロールするサイコロの数、mは各サイコロの辺の数です。

ここでの私の問題は、dの横に式が必要なことです。これを行うと、Ironyはdが無効な文字であると文句を言います。その周りのスペースは機能し(1 d 6)、英数字以外の文字に置き換えると機能します(1%6)。現時点では、ソース内の各dを「d」に置き換えるだけで機能しますが、変数(変数を区別するために「$」を前に付ける予定です)に到達すると、これは明らかに機能しません。

問題は、スペースなし(1d6)で、できれば文法を大幅に変更せずに、どうすれば機能させることができるかということです。(注:それでもスペースで機能する場合は完全に問題ありません。スペースが必要になることは望ましくありません。)

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

c# - Irony .NET:式演算子の優先順位

私はIronyを使用してDSLを解析しています。DSLには、ANDおよびORと組み合わせることができる式があります。

「Aと(BとCまたはD)」という表現があります。「Aと(Bと(CまたはD))」として解析されますが、「Aと((BとC)またはD)」である必要があります。

andキーワードをorキーワードよりも優先度の高い演算子として登録すると、そうなると思いました。私は何が欠けていますか?

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

parsing - 単純な言語文法での関数シグネチャの定義

私は現在、Ironyを使用して簡単な表現言語を作成する方法を学んでいます。関数のシグネチャを定義する最良の方法を見つけ出し、それらの関数への入力を検証するのが誰の責任であるかを判断するのに少し問題があります。

これまでのところ、私の言語の基本的な要素を定義する簡単な文法があります。これには、少数の二項演算子、括弧、数値、識別子、および関数呼び出しが含まれます。私の文法のBNFは次のようになります。

Ironyパーサーを使用して、さまざまな入力文字列の構文を検証し、それらがこの文法に準拠していることを確認できます。

それはすべてうまくいっていますが、今度はさらに一歩進んで、各関数に必要なパラメーターの数とともに、使用可能な関数を定義したいと思います。たとえば、 1つのパラメーターを受け入れ、2つのパラメーターをFOO受け入れる関数が必要です。BAR

2番目のステートメントが解析されるときに、この関数の予想される入力を認識しているエラーメッセージを出力できるようにしたいと思います。

これらのステートメントを実際に評価する必要はありません。ステートメントの構文を検証し、それらが有効な式であるかどうかを判断するだけです。

これをどの程度正確に行う必要がありますか?技術的には、次のように関数を文法に追加するだけでよいことを知っています。

しかし、これについての何かは完全に正しく感じられません。私には、文法はジェネリック関数呼び出しのみを定義する必要があり、言語で使用可能なすべての関数を定義する必要はないようです。

  • これは通常、他の言語でどのように達成されますか?
  • 言語文法の基本的な構文と関数定義のようなより具体的な要素を分析する責任を処理する必要があると呼ばれるコンポーネントは何ですか?両方の責任を同じコンポーネントで処理する必要がありますか?
0 投票する
1 に答える
1078 参照

c# - Ironyを使用したプレフィックス表記式パーサーの実装

Ironyライブラリで文脈自由文法を使用して、ユーザーが入力したプレフィックス表記の論理式を解析しようとしています。これはクラスの割り当てのためのものなので、誰かがこれの専門家である場合は、もっと知りたいです。

次の形式のユーザー入力の論理式を受け入れる必要があります。

Ironyで実装している文脈自由文法を使用して、これらを式ツリーに解析しようとしています。私が使用している文脈自由文法は、BNFのここにあります。

以前、Ironyを使用して式を解析しましたが、何らかの理由で機能させることができません。式を入力するand P Qと、And非終端記号の一部ではなく、識別子終端記号として「and」を識別しているように見えます。私は何か明らかなことをしているかもしれませんが、それを理解することはできません。これが私が拡張した言語クラスです:

そして、これが私のドライバークラスです:

私が何か間違ったことをしている場合は私に知らせてください、私はこれについていくつかのアドバイスが欲しいです。