問題タブ [mini-language]
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.
database - データベーススキーマを読み取るための外部ライブラリまたはミニ言語?
妻のために単純なデータベース アプリケーションを作成することを検討していますが、適切なプログラミングの実践に行き詰まっており、データベース スキーマを保存するための人間が読めるソースが必要です。
ただ、私はその仕事のためのツールを知りませんし、それらが存在しないとは信じられません.
では、プレーン テキスト ファイルからのデータベース スキーマの読み取りをサポートするために、どのようなライブラリやその他のツールが存在するのでしょうか。
invenetix の質問に対して: ビルド時にデータベース作成コードを生成するか、リリースにスキーマ記述を含めて、実行時に記述からデータベースを構築することを期待しています。ドラえもんの提案はいいのですが、できることなら、あらかじめ決められた RDBMS に縛られたくありません。
おそらく、プログラミング プロジェクトでデータベースを使用したことはありますが、作成コードを担当したことはありません。
この時点で問題を設計しすぎている可能性があります。
parsing - 構成可能な文法
ミニ言語の組み込みをサポートするプログラミング言語は非常に多くあります。PHP は HTML に埋め込まれています。XML は JavaScript 内に埋め込むことができます。Linq は C# に組み込むことができます。Perl には正規表現を埋め込むことができます。
考えてみれば、ほとんどのプログラミング言語はさまざまなミニ言語としてモデル化できます。たとえば、Java は、少なくとも 4 つの異なるミニ言語に分割できます。
- 型宣言言語 (パッケージ ディレクティブ、インポート ディレクティブ、クラス宣言)
- メンバー宣言言語 (アクセス修飾子、メソッド宣言、メンバー変数)
- ステートメント言語 (制御フロー、順次実行)
- 式言語 (リテラル、代入、比較、算術)
これらの 4 つの概念言語を 4 つの異なる文法として実装できれば、複雑なパーサーやコンパイラの実装で通常見られるスパゲティ現象の多くを確実に減らすことができます。
私は以前にさまざまな種類の言語のパーサーを実装しました (ANTLR、JavaCC、およびカスタム再帰降下パーサーを使用)。言語が非常に大きく複雑になると、通常、1 つの huuuuuuge 文法になってしまい、パーサーの実装は次のようになります。本当に醜い、本当に速い。
理想的には、これらの言語のいずれかのパーサーを作成するときは、構成可能なパーサーのコレクションとして実装し、それらの間で制御をやり取りするのがよいでしょう。
注意が必要なことは、多くの場合、含まれる言語 (Perl など) が、含まれる言語 (正規表現など) の独自のターミナル センチネルを定義することです。良い例を次に示します。
このコードでは、メインの perl コードが非標準の終端 "|" を定義しています。正規表現用。正規表現パーサーは、親パーサーに相談しないと式の終端を見つける方法がわからないため、正規表現パーサーを perl パーサーとは完全に異なるものとして実装するのは非常に困難です。
または、Linq 式を含めることを許可する言語があったとしますが、(C# のように) セミコロンで終了する代わりに、Linq 式を角かっこ内に表示することを義務付けたいと思いました。
親言語の文法内で Linq 文法を定義した場合、構文の先読みを使用して括弧の囲みを見つける「LinqExpression」の明確な生成を簡単に作成できます。しかし、親の文法は、Linq 仕様全体を吸収する必要があります。そして、それはドラッグです。一方、別の子 Linq パーサーは、外部のトークン型の先読みを実装する必要があるため、停止する場所を見つけるのに非常に苦労します。
そして、Linq パーサーは親パーサーとはまったく異なる一連のトークン化ルールを定義するため、個別の字句解析/解析フェーズを使用することはほぼ除外されます。一度に 1 つのトークンをスキャンしている場合、親言語の字句解析器に制御を戻すタイミングをどのように知るのでしょうか?
皆さんはどう思いますか?より大きな親言語内にミニ言語を含めるために、明確で分離された構成可能な言語文法を実装するために、今日利用できる最良の手法は何ですか?
wpf - ジオメトリ/パスをミニ言語文字列に変換しますか?
プログラムでパス文字列を WPF のパス オブジェクトに変換する方法を突き止めるのはそれほど難しくありませんが、ミニ言語でジオメトリまたはパスを文字列に変換する組み込み関数はありますか?
python - Python の Format Specification Mini-Language を使用してフロートを揃える
Python のFormat Specification Mini-Languageを使用して、文字列の表示方法をより詳細に制御できることを読みました。しかし、それを使用して浮動小数点数を小数点に揃えて表示する方法を理解するのに苦労しています。
たとえば、次の 3 つのリストがあるとします。
これらの 3 つのリストを反復処理して出力したいと思います
これまでのところ、私は試しました:
これは次を印刷します:
これはほぼ正しいですが、浮動小数点数が小数点の周りに配置されていません。Python のFormat Specification Mini-Languageを必要な方法で使用するにはどうすればよいですか?
python - Python Float 文字列の書式設定が正しく機能しない
私はこれを正しく行っていると確信していますが、Python 2.7.3 文字列フォーマットのミニ言語から期待する結果が得られません。float の出力を 3 つの整数値とさまざまな数の 10 進数値にフォーマットしようとしています。整数値以外はすべて機能します。
それだけで、次のコードは 3 つの整数値を取得するために機能します...
そしてフロートは機能します...
ただし、この 2 つを組み合わせると、適切に機能しないようです。小数精度は機能しますが、整数精度は機能しません...
次のいずれかの形式を試しても同じです...
可変/動的小数精度のために私が何をしているのか知りたい場合は、ポイントはすべての値を同じ長さに保つことですが、異なる値のセットは同じ精度を持たない場合があります。したがって、最も長い精度値または 10 の小さい方を取得し、他の値をこのように強制的に一致させます..
繰り返しますが、これはすべて完全に機能しますが、整数値を float 精度と組み合わせると 3 桁の精度で返されることはありません。したがって、同じフォーマットされた長さで値が出力されるようにするための私の努力はすべて無駄です。最終的に、出力は次のようになります...
代わりに、このように見えます...
言い換えれば、醜い。:-|
少なくとも、次の出力を受け入れます...
ここで私が間違っていることはありますか?あなたの助けは大歓迎です!
よろしく、
-RMWカオス
haskell - Haskell でミニ言語を書く、"while" ステートメントとブロックで問題 { }
編集: 問題は部分的に解決されました。更新のために一番下までスキップしてください。
私は Haskell を使用して小さな言語を書いており、多くの進歩を遂げましたが、「{ ... }」のようなブロックを使用するステートメントの実装に問題があります。パーサー ファイルで次のような If ステートメントのサポートを実装しました。
そして構文ファイルで:
while ステートメントに何か問題があり、何がわかりません。ロジックは正しいようですが、コードを実行すると次のエラーが発生します。
読み取られるファイルは次のようになります。
エラー レポートを理解しようとしましたが、何も問題を解決できませんでした。
haskell - Haskellで書かれたミニ言語のまとめ、「while」ステートメントの問題
以前、これと同様の質問をして、元の質問を解決してもらいました。他のエラーによって隠されていた追加の問題が発生しました。「if」ステートメントのようなステートメントは正しく機能しますが、「while」ステートメントは機能しません。「stmt」を評価するときは、環境を更新する必要があります。これは、次のような私の「if」ステートメントに対して適切に機能します。
evalは次のようになります。
解析されるファイルは次のようになります。
whileステートメントを機能させるための私の試みは、次のように行われます。
ただし、これにより')'で解析エラーが発生します。解析されるファイル内のwhileステートメントの予想される形式は次のとおりです。
この予想される形式に基づいて適切な環境を返す方法を理解しようとしています。Haskellのwhileステートメントに同様の構造がすでに存在する場合は簡単ですが、私が知っているこのような構造は存在しません。
python - float から小数点を削除する Python ミニ言語フォーマット仕様
Python のフォーマット ミニ言語を使用して辞書を参照しています。辞書の 1 つの float について、小数点なしで出力したいと思います。
例えば:
戻り値:
ただし、出力が返されるように b_float (「0.」を削除する) をフォーマットしたいと思います。
これは、ミニ言語フォーマット仕様のコンテキスト内で可能ですか?
これは、(a) 辞書自体の代わりに個々の項目を渡す (および引数でそれらを編集する) か、(b) 出力文字列を後処理することによって実行できることは承知していますが、Python の mini-言語は、ミニ言語のフォーマット仕様のみにこの問題を単純化するのに十分洗練されています。
(この動機に興味がある人のために、私は衛星パラメーターの辞書から TLE を印刷しようとしています。興味がある場合は、Google/Wikipedia で詳細がわかるでしょうが、各文字の位置は重要です。偏心など一部の項目では小数点以下を想定しています。)