这门语言是一种 esolang。
Puncta 一词来自拉丁文中的 punctum,意思是标点。
因为在现代编程世界中,标点符号往往失去了其本身含义:
- 句号
.只是小数点和成员访问的运算符; - 感叹号
!竟然变成了表示逻辑否定的符号; - 而分号
;,甚至只能成为 JS 中可有可无的分隔符,在大多数脚本语言中销声匿迹。
于是我选取了逗号,、句点.、感叹号!、问号?、冒号:、分号;,打算让这些标点符号回归它们原本的意思;
同时,我又从中国古文中的 “某某者,某某也” 和日语中句尾的助动词 です (desu) 和 ですか (desuka) 中汲取灵感;
最终设计了一门不读到句末的标点符号,就不知道到底要做什么的语言。
A, B.
L:
A, print!
A, 0? L;-
赋值语句:
A, B.这是一句陈述句,你可以理解为:“A 者,B 也。” 既然 A 是 B ,那么 B 自然就被赋值给了 A 。
-
标签:
L:冒号有引出下文的作用,这里自然用来保存跳转位置,也就是标签。
-
命令/动作:
A, print!感叹号表示强调,这相当于你母亲叫你去洗碗一样,我们也用命令的语气,让 A 快去打印(print)。
-
条件跳转语句:
A, 0? L;这是疑问句,可以理解为 “A,0,相等乎?” ,如果相等,那么就跳转到标签L。
-
跳转语句:
L;为何采用分号?因为分号表示这一小句话结束了,但是整句话还没说完。那么接下来去哪里呢?当然是去冒号 “引出” 的地方了。
跳转语句既可以跟在条件判断后面表示有条件跳转,也可以单独成句,表示无条件跳转。
2025-12-15 更新:加入注释和字符串
-
注释:
(This is a comment)括号的本义就是为了解释说明,尤其是在剧本(英文中剧本正是script)中常用来补充角色当时的动作生态,在代码中的作用自然就是注释。
支持注释块内换行,并且括号支持嵌套。
-
字符串:
"a string"这个比较常规,双引号也是少有的保留了 “引用他人话语” 本义的符号。
支持反斜杠转义符,不支持字符串内直接换行(需要
\n转义)。
2025-12-26 更新:加入语法糖
-
赋值语法糖:
A, action! @variable / @value .@是一个 “没那么古老” 的符号,其本义是at,也就是在某处,现代常用于邮箱、社交媒体软件中快速 “呼叫” 某人。在这里,这个符号是一个赋值语法糖,把诸如:
A, 0. (Here is the first declaration of A) A, B. A, print!
这样的操作,压缩到一行中:
A, 0. (Here is the first declaration of A) A, print! @ B . ( dot `.` at the end of the statement)
省去了传递值的步骤,在打印字符串的时候极其有用(如果你的字符串只是一个一次性的值):
s, puts! @ "Hello!" .
-
语句块语法糖:
label#:和label#;#也是一个 “年轻” 的符号,在本语言中,取其 “标签/话题” 的含义,用作自动生成语句块标签。相当于把:
LEnd; L: LEnd:
缩写成:
L#: L#;这样能够自动生成对于 “语句块” 内代码的保护,使得这段代码顺序执行时不触发,只有跳转进入时才执行。
各位读者不难看出,在这门语言中,句尾标点符号的重要性了:
- 如果你只读到了
A, B,那你就不能确定接下来要赋值(.)、执行动作(!),还是判断条件(?); - 如果你只读到了
L,那你就不能确定这是在定义标签(:),还是要准备跳转(;)。
这门语言在设计时还借鉴了 Minsky Machine,它是一种满足图灵完备的最小计算模型。
| 符号 | 语气 | 语义 | 示例 |
|---|---|---|---|
, |
停顿 | 分隔 | A, B. |
. |
陈述 | 赋值 | A, B. |
! |
命令 | 调用动作 | A, print! |
? |
疑问 | 条件判断 | A, 0? L; |
: |
引出 | 定义标签 | L: |
; |
转承 | 跳转 | L; |
() |
解释 | 注释 | (comment) |
"" |
引用 | 字符串 | "string" |
@ |
附着 | 语法糖 | A, B! @C. |
# |
标签 | 语法糖 | L#: L#; |