示例.zh · zhlang
1// 行注释:如果 变量 打印 都不应着色;字符串里的 // 与 /* 也不应算注释
2/* 块注释
3 如果 循环 返回
4 里面可以出现 @引入 和 "引号"
5*/
6
7@引入 "工具.zh" 为 工
8@引入 "集合.zh" 只 最大值, 最小值
9
10常量 名字 = "zhlang\n\"引号\"\\反斜杠\t制表"
11常量 原始 = r"正则模式:\d+\s+$"
12常量 模板 = `你好,${名字}! 计算 ${1 + 2} 得 ${转字符串(3)}`
13常量 转义 = `反引号 \` 与 \${这里不插值}`
14常量 嵌套 = `字典:${ {"键": "内\"容"}["键"] }`
15
16变量 十进制 = 1_000_000
17常量 十六 = 0xFF_FF
18常量 二进制 = 0b1010_0101
19常量 八进制 = 0o755
20常量 浮点 = 1.5e-3
21
22函数 阶乘(n)
23 如果 n <= 1
24 返回 1
25 否则如果 n == 2
26 返回 2
27 否则
28 返回 n * 阶乘(n - 1)
29
30func 英文写法(输入)
31 var 计数 = 0
32 const 上限 = 10
33 for i from 1 to 上限
34 if i % 2 == 0 and 计数 < 5
35 计数 += 1
36 else
37 继续
38 while 计数 > 0
39 计数 -= 1
40 return true
41
42结构体 点
43 x
44 y
45
46类 人类
47 名字 字符串 = ""
48 年龄 数值 = 0
49 函数 初始化(名字, 年龄 = 0)
50 本.名字 = 名字
51 本.年龄 = 年龄
52 函数 打招呼()
53 返回 `你好,${本.名字}`
54
55@私有
56函数 内部函数()
57 返回 真
58
59@类方法(人类)
60@类方法(几何.点)
61函数 生日()
62 本.年龄 += 1
63 return 本.年龄
64
65@外部("c_add") 函数 加法(a, b)
66
67变量 坐标 点 = 点(3, 4)
68常量 原点 = 点{x: 0, y: 0}
69变量 通道变量 通道 = 通道()
70函数 平方(n)
71 返回 n * n
72常量 插值调用 = `结果:${平方(4)}`
73
74常量 分数 = [88, 92, 79, 95]
75追加(分数, 90)
76打印(长度(分数), 取(频次, "键", 0), 转字符串(42))
77常量 平方 = 映射(分数, x => x * x)
78常量 和 = 归约(分数, 0, (a, b) => a + b)
79排序(分数, (a, b) => a - b)
80
81常量 ch = 通道()
82启动 生产者(ch)
83选择
84 接收 ch 为 v
85 打印("收到", v)
86 发送 ch, 1
87 打印("已发送")
88 否则
89 打印("空闲")
90
91尝试
92 如果 真
93 抛出("主动抛出")
94捕捉 错误
95 打印错误(`失败:${错误}`)
96最终
97 打印("清理完成")
98
99循环 i 从 1 到 3
100 循环 字 在 "abc"
101 如果 字 == "b"
102 跳出
103
104@C "辅助.c"
105@C
106static zhv_t c_add(zhv_t a, zhv_t b) {
107 // C 里的注释
108 return zh_add(a, b, 0);
109}
110@C结束
111
112打印(加法(1, 2))
113
114// 全角标点与单引号应标红
115打印(1,2)
116
117// 对抗样例:这些整体是标识符,不是关键字
118变量x = 1
119如果x = 2
120否则如果x = 3
121x如果 = 4
122
123// 未知转义应标红
124常量 坏转义 = "未知\q转义"
125
126// 字符串里的注释符
127打印("http://example.com/*不是注释*/")
128