凹语言中文设计探讨

中文语言项目虽不少,但鲜见详细设计思路的分享。
感谢 @zhaopuming凹语言中文语法设计,有各种推敲和取舍。不少相当有代表性,可供中文语言设计者参考。

2 个赞

基于英文语法设计中文语法时,常难以跳出一对一设计。英文设计往往倚重特殊符号,而当初设计时必然也考虑到易用和易懂等因素。在中文设计时如果选择相同的语义元素,往往只能从中文常用符号中选择,改进的余地挺小。

如果从语义开始分析需求、拆分各个语义元素,先用直白和尽量准确的自然语言表达,同时考虑相关错误写法和反馈信息;后根据需要(简约、领域专用符号)再进行优化,也许受限会更少。

var a: int = 1 为例,猜测其中的几个语义和一些相关错误:

  • var 表示定义新变量,而且a只能是变量而不能是类型名。如果不允许重复定义,之前就定义过a变量或者有名称为a的类型时会报错“a已定义”

  • = 将右侧的值赋给左边的变量,之后可以修改变量值。数学中常用的 = 往往表示不变的“相等”关系如 单价×数量=总价,且右侧常是计算结果,因而语义并不完全相同。

  • :表示变量值的性质,之后不能再改变。如果赋的值不符此性质,会报错如“‘你好’是字符串而不是整数”。

可见,有几种描述属性或关系的语义:

  1. 声明后恒定
  • var 表示 a 是一个变量

  • : 表示 a 的值是整数

  1. 声明后会变
  • = 将某值暂赋给 a,a 不一定一直保持此值

为表达语义1,将语法一致为:某物 是 某属性(空格仅为清晰语法格式,技术上可改为无空格设计)。如:

  • a 是 变量

  • a 是 整数 // 与报错信息 ‘你好’是字符串而不是整数 的语法一致

  • a 是 整数变量

这样就把 : 和 var 两种语法元素化为一个。

为表达语义2,虽可用其他语法,但“变量”已有值会变的含义,因此可用 值 是 1,综合对比如下:


var a: int = 1

a是整数变量,a的值是1

到此,仅粗浅演示“用直白和尽量准确的自然语言表达”这一步。之后可分阶段纳入更多语义元素综合考虑。语法优化可最后进行,也符合“不用过早优化”的原则。

:eyes: :eyes: 个人从来没考虑过这个问题,也小抛一下赋值语句的写法(融合数学和中文,非喜勿喷,哈哈)

设 a = 1
设 b = 2
设 c
如果 a 为 1
则 
   c = a + b
否则
   c = a - b

或许这样(我是变量 := “你好” )声明并赋值,
这样(我是变量 ;我是变量 = “你好”)先声明再赋值。