言語が人間の入力を意図している場合、それを定義することは、
- 明確で簡単な解析を保証する構文制約の追加
- 構文を削除/曲げて、意図した人間の聴衆にとって言語が直感的で「自然」に感じられるようにします。
2 番目の要件を満たすことは、最初の要件よりもはるかに難しく、
- 言語の意図された使用例
どのタイプのキーボード/入力デバイスが利用可能ですか? 許可された文字の中に、表示が難しい、またはディスプレイ上で見えにくい文字はありますか?
頻繁に使用され、たまにしか必要とされないトークン/式はどれですか? ユーザーは短いアドホック コード スニペットを頻繁に入力するのか、それとも長期間にわたって再利用および変更することを意図したプログラムなのか
... など。
- 対象読者の背景/文化
可能であれば、他の通常の (そして単純な自然) 言語のどの一般的な慣行/イディオムを再利用できるか、または再利用する必要がありますか?
簡潔だが不可解なスタイルを好むべきか、それともより明示的だがより冗長なスタイルを好むべきか?
...など
基本的に、言語の構文について提案することは、使用目的とユーザーを十分に把握することができずに困難です。
それにもかかわらず、日付形式の質問に対して次のことを提案したいと思います。
日付値には別の形式を使用してください。ユーザーにとって十分に「自然」でありながら、通常の文法で説明できるほど十分に特徴的なもの。
たとえば、月に 3 文字の略語を使用するもの(欠点 DSL は英語や他の言語に結び付けられますが、利点もあります。人間にとってどれが日でどれが月かという曖昧さが取り除かれます)。とりあえず:
dd-mmm-yyyy (may seem unnatural in cultures where the prevailing date order
starts with the month maybe yyyy-mmm-dd then ?)
mmm-dd-yyyy (better for the above mentioned cultures)
ddmmmyyyy (avoid the dashes, but impose leading zeros)
MnnDnnYyyyy (using "M", "D" and "Y" (or others) as explicit prefixes; now,
this is completely culture neutral, but maybe a bit awkward...)
とにかく、ただのアイデアです...適用可能性は、言及された人的/文化的要因、および残りの構文によって異なります。たとえば、上記は変数が明示的にマークされていることを暗示している可能性があります (たとえば、多くの言語が $ プレフィックスを使用する理由の 1 つです)。これは、[奇数だが可能性のある] 変数識別子との競合を回避するためです。
簡単に言えば、12 か月タグをパーサーにとって十分な識別子にすることで、特殊文字の接頭辞 (数学やその他の式でこれらの文字を使用すると衝突する可能性があります) の必要性を置き換えるという考えです。