当一种语言用于人类输入时,定义它同样是一个问题
- 添加语法约束以确保明确且易于解析
- 删除/弯曲语法以确保语言对预期的人类受众来说是直观的、“自然的”。
满足第二个要求比第一个要困难得多,并且需要深入了解
- 语言的预期用例 可以使用
哪种类型的键盘/输入设备?允许的字符中是否有一些字符难以生成或在显示器上难以看到?
哪些标记/表达式会经常使用,哪些只是偶尔需要?用户是否经常输入简短的临时代码片段,或者程序是否打算长期重复使用和修改
......等等。
- 目标受众的背景/文化
如果可能,可以或应该重用其他常规(和自然)语言中的哪些常见做法/习语?
人们应该喜欢一种简洁但神秘的风格,还是更明确但更冗长的风格?
... ETC。
基本上,如果不很好地掌握预期用途和用户,就很难对语言语法提出建议。
不过,对于日期格式问题,我想提出以下建议:
完全使用另一种日期值格式;一种对用户来说足够“自然”但又足够独特以至于常规语法可以描述的语言。
例如,一个使用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...)
无论如何,只是想法......适用性会因提到的人类/文化因素以及语法的其余部分而异。例如,上面可能暗示变量被显式标记(这是许多语言使用 $ 前缀的原因之一),以避免与 [odd, but possible] 变量标识符的可能冲突。
简而言之,这个想法是通过使 12 个月标签成为解析器足够好的鉴别器来替代对特殊字符前缀的需求(然后可能会与这些字符在数学和其他表达式中的使用发生冲突)。