問題タブ [mgrammar]
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.
oslo - Oslo の Intellipad: 3 列の MGramarMode を設定するには?
私は MSchema に Oslo を使用しています。よく働く。データベース設計用の M スキーマを記述でき、T-SQL を生成して PK、FK、整合性チェックなどを含むデータベース全体を構築します。.m を .mx にコンパイルしてロードする .bat ファイルをセットアップしました。それをデータベースに追加し、SqlMetal をプロジェクトに実行すると、30 秒で変更を続行できます。大好きです。
では、mGrammar に進みます。アプリにどのように組み込むかはよくわかりませんが、それを理解します。最初に必要なのは、Intellipad をセットアップして、入力/文法/出力のトリプティクを提供することです。私は困惑しています。フローで設定する方法がわかりません。はい、おそらくsong.mgプロジェクトを取得して名前を変更できますが、それがどのように機能するかについての洞察は得られません。何か案は?
oslo - シフトリデュースとリデュースリデュースコンフリクト
私はこれに頭を悩ませているので、shift reduce と reduce reduce conflict を理解する助けが必要です。なぜ問題なのか理解できない文法があります。文法を添付することもできますが、これが実際にどのように機能するかを知りたいです。
最初の質問は、MGrammer が作成するパーサーの種類は何ですか? 私が理解しているように、shift reduce と reduce reduce の競合はパーサーの種類によって異なります。
2 番目の質問です。reduce reduce conflict とは何を意味し、shift reduce conflict とは何を意味するのでしょうか?
私は字句解析の基礎と形式的な文法を知っていますが、言語設計に携わってからしばらく経っているので、ここでのヘルプは大いに当てはまります。
アップデート:
私は空白を重要視する言語を扱っていますが、MGramar でこれを行う可能性について疑問に思っています。あいまいさを解決するために先読みが必要ですか?
parsing - MGrammarの文法と変数の宣言
別の方法で行うように言われると思いますが、特定の理由から、この方法で行う必要があります。そうでなければ、私は立ち往生しないでしょう:-P
私が取り組んでいるスクリプト言語は、次のように定義された変数を受け入れる必要があります。
これは要件です。私はその前に小さな文法を書きましたそれは私がそれらをこのように定義することを可能にするでしょう
しかし、要件は変更されました。文法がこんな感じになる前の様子
sTypeの値は、System.String、Int32など、次に変数名、そして式が何であれのいずれかでした。次に、これをDeclareVarノードに投影し、必要なパラメーターを指定しました。コードでXMLに解析し、MGrammarにXMLを解析させ、ASTを正常にトラバースしました。彼らは型を宣言せずに変数を実行できるようにしたいので、私は今何をすべきか、つまり宣言された型を持たない変数を適切なクラスに格納する方法に固執しています。どんな助けでもありがたいです、うまくいけばそれはすべて理にかなっています。
grammar - MGramar と複数の有効な解釈
私が抱えているのは、他にぶら下がっている問題だと思いますが、よくわかりません。私が書くことを任されている言語は、複数行の if ステートメントと単一行をサポートする必要があります。
と
私の言語で対応するもの
と
また、else-if と else のサポートも追加する必要があります。どちらも上記と同じ構文を begin と end で使用します。これを機能させるためにしばらく時間を費やし、近づいてきましたが、現在使用している文法では、「この入力には複数の有効な解釈があります...」というエラーが発生します。私が使用しているMGramarコードは次のとおりです。
if/else if/else 構造を機能させるためにさまざまなことを試したので、これはおそらくこれの 10 番目のバージョンです。
基本的に、私の Main はステートメントの StatementList を取得します。sIf はその 1 つです。sIf は、複数行または単一行の if ステートメントの後に、オプションの sElseIf が続きます (else を持つ必要はありません)。
問題は、正規表現コンパイラが、sElseIf ステートメントではなく、sElse の後に sIf ステートメントが続く場合に、else if を認識している可能性があることだと思います。プレビュー モードでは、実際に希望どおりにツリーが描画されるため、C# アプリで解析するときにこのメッセージを無視する方法があれば、それもうまくいくと思います。
oslo - MGramar で小数を定義するより良い方法はありますか?
Microsoft の新しい M Grammar で DSL に取り組んでいますが、10 進値を許可する必要があります。私は小数を次のように定義しました
それはうまくいくようですが、もっと良い方法はありますか?何かが足りないような気がします。
oslo - IFステートメントを解析するためのMGrammar
MGrammar仕様を作成して、特定の情報を探す擬似コードを解析しています。1つの重要な要素を除いて、ほとんどの仕様が機能しています。
擬似コードはif-then-else構文をサポートしており、それを解析するための十分な方法を見つけることができませんでした。正確な構成は...
IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF
...ElseとElseifはオプションです。
私がこれまでに持っているのは次のとおりです。`構文ステートメント=r:ReturnClause => r |
i:IfClause => i |
ei:ElseifClause => ei |
e:ElseClause => e |
end:EndClause => end |
v:式=> v;
構文IfClause=If name:Identifier operator:Operator Then statement:Statement => If [name、operator、Then [statement]];
構文ElseifClause=Elseif name:Identifier operator:Operator Then statement:Statement => ElseIf [name、operator、Then [statement]];
構文ElseClause=Else statement:Statement => Else [statement];
構文EndClause=Endif; `
ただし、「Then」および「Else」の後のステートメントは十分に貪欲ではなく、解析ツリーの最初のステートメントのみをキャプチャします。
誰かがMGrammarを使用してIfステートメントの解析を実装しようとしたか、何か提案がありますか?
mgrammar - MGramar で複数行の C スタイル コメントを解析することは可能ですか?
私は 2009 年 5 月の Oslo ビットをハックして、いくつかのソース コードをトークン化して実験しました。ただし、複数行の C スタイルのコメントを正しく処理する方法がわかりません。例えば:/*comment*/
私を逃れるいくつかのケース:
また
どちらか一方を機能させることはできますが、両方を機能させることはできません。文法は次のとおりです。
コメントアウトされたトークンは私がやりたいと思っていることですが、再帰的なトークンは許可されていません。MGrammar 自体が「壊れた」複数行のコメントを持っている (それは処理できない/***/
) という事実から、これは不可能だと思います。
他に誰か知っていますか?
oslo - Mでパーサーを作成し、ルールを使用せずに消費する
私は自分の娯楽のためにHTMLパーサーを書いていて、Mを試してみたかったのです。
私はこの作業をHTML4.01標準に基づいており、そこには
STYLE要素とSCRIPT要素はデータモデルにCDATAを使用しますが、これらの要素の場合、CDATAはユーザーエージェントによって異なる方法で処理される必要があります。マークアップとエンティティは生のテキストとして扱われ、そのままアプリケーションに渡される必要があります。文字シーケンス「</」(終了タグのオープン区切り文字)の最初の出現は、要素のコンテンツの終わりを終了するものとして扱われます。有効なドキュメントでは、これが要素の終了タグになります。
しばらく考えて、本当にやりたいのはこんな感じ
開いた山かっこ<の後にスラッシュ/が続くまで一致する、ある種のトークン化ルールを実行したいと思っています。
エスケープシーケンスが単一の文字である場合、これを書くことができたので、これは問題にはなりません。
そして、それはうまくいくでしょう、私がこれを正しい方法で行っているかどうかはわかりませんが、問題は私が別の言語に埋め込まれていることに関連していますが、この場合はスクリプト言語を気にしないので、単に欲しいです頭をスキップします。
parsing - MGramar を使用した行コメントのブロックの解析
MGramar で行コメントのブロックを解析するにはどうすればよいですか?
行コメントのブロックを解析したい。それぞれの横にある行コメントは、MGraph 出力でグループ化する必要があります。
行コメントのブロックをグループ化するのに問題があります。私の現在の文法では "\r\n\r\n" を使用してブロックを終了していますが、ファイルの終わりや他の構文を導入した場合など、すべての場合に機能するとは限りません。
サンプル入力は次のようになります。
私の現在の文法は次のようになります。
c# - C# で特定のデータを解析する
特定のテキスト形式でデータを保存しています。
それを解析して、そこから C# 型のデータ構造を取得する必要があります。
C# でパーサーを記述するのは簡単ではありません (非常に多くの正規表現とハード コード)。
Microsoft から Oslo\MGramar について聞いたことがあります。このツールは、特定のデータの C# パーサー コードを生成しますか?
出力 他のライブラリを参照せずにパーサーの C# コードのみが必要です。