Z语言实现基本原理

简介: Z语言作者介绍它的实现原理和细节. Under the hood of Z programming language by its author.

原文作者: @TKT2016 (知乎, github)

计算机编程发展已经有几十年了,编程的难度也越来越小,会编程的人也越来越多。但是现在的编程还是非常难,需要专门学习很长时间才能掌握。我的目标是创造出更简单更容易掌握的语言,所以我开发出了Z语言。

C#语言中实现用控制台打印”你好”的程序是

Console.Write(“你好”);

对一个没有接触编程的人来说,他至少需要懂Console是什么、Write是什么、‘.’号起什么作用、“你好”为什么需要括号括起来。

在Z语言中打印“你好”的程序是这样写的

控制台打印“你好”

相比来说,Z语言程序是主要用汉字写的,和中文自然语法比较接近,需要学习的知识点更少,一般人即使没有学过,也能一眼看出这句话是什么意思。

Z语言编译为了实现正确编译上条控制台打印“你好”程序,会进行以下步骤。

一、准备实际功能类

(控制台的源文件在’Z语言系统/控制台’)

1.新建类

新建一个叫‘控制台’的C#类,给这个类名添加特性[ZStatic]。(Zstatic在‘Z语言接口编写文档’解释)

2.实现’ public static void Write(object obj)’方法

3.给‘打印(object obj)’添加‘[ZCode("打印(object:obj)")]’特性

二、读取Token流

编译器读取源文件,把控制台打印“你好” 分析成标识“控制台打印”和字符串“你好”两个Token

控制台打印“你好” → 控制台打印 + “你好”

三、语法分析

编译器分析导入的开发包,构建词库,根据‘[ZStatic]’标注的控制台类型和‘[ZCode("打印(object:obj)")]’构建两个词‘控制台’和‘打印’

四、表达式分析

编译器根据词库把‘控制台打印’分词为‘控制台’和‘打印’两个Token

控制台打印 + “你好” → 控制台 + 打印+ “你好”

五、语义分析

从控制台Token查找到控制台类型,根据打印Token查找特性为‘[ZCode("打印(object:obj)")]’的方法Write,把把“你好” Token作为方法调用的参数

六、生成二进制指令

编译器生成CLR调用方法指令

ldstr bytearray
(60 4F 7D 59 )

call void ['Z语言系统']'Z语言系统'.'控制台'::Write(object)

Z语言也可以实现对参数不在末尾的方法的调用。比如下面例子。

在C#中,控制台换行实现如下

Console.WriteLine();

如果要求根据一个整数参数k连续换行k行,代码可以编写为一个方法(在’Z语言系统/控制台’)

public static void 换行(int k)
{
  for (int i = 0; i < k; i++)
  {
  Console.WriteLine();
  }
}

用C#语言调用这一方法的程序是

控制台.换行(5);

而给这个方法加特性[ZCode("换(int:k)行")] 后就可以在Z语言中这样调用

控制台换5行

5是参数,‘换’和‘行’是调用过程名称的组成部分。这是Z语言先进于主流编程语言的一个地方,主流编程语言中参数必须放在语句的末尾,Z语言的参数可以放在一条语句的任意位置,实现了编程的类自然语言化。

编译器对控制台换5行 这条程序的处理大概步骤如下。

一、读取Token流

控制台换5行 → 控制台换5行

二、语法分析

编译器分析导入的开发包,构建词库,根据‘[ZStatic]’标注的控制台类型和‘[ZCode("打印(object:obj)")]’构建两个词‘控制台’、‘换’、‘行’

三、表达式分析

对程序进行分词

控制台换5行 → 控制台 + 换 + 5 +行

四、语义分析

从控制台Token查找到控制台类型,根据换 + 5 + 行查找特性为‘ZCode("换(int:k)行")’的方法,把把5作为方法调用的参数

五、生成二进制指令

编译器生成CLR指令

ldc.i4.5

call void ['Z语言系统']'Z语言系统'.'控制台'::'换行'(int32)

2018-07-24

相关文章
|
机器学习/深度学习
罗马数字对照表
罗马数字对照表
591 0
|
1月前
|
人工智能 监控 Kubernetes
稳定支撑大规模模型调用,携程旅游的 AI 网关实践
为了进一步提升服务水平和服务质量,携程很早就开始在人工智能大模型领域进行探索。而随着工作的深入,大模型服务的应用领域不断扩大,公司内部需要访问大模型服务的应用也越来越多,不可避免的就遇到了几个问题,我们自然就会想到使用网关来对这些服务接入进行统一管理,并增加各种切面上的流量治理功能。
201 43
|
8月前
|
人工智能 搜索推荐 数据挖掘
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
原生鸿蒙版小艺APP成功接入DeepSeek-R1,为HarmonyOS用户带来更智能高效的交互体验。通过此次升级,用户在编程、学习和工作中的问题可迅速获得专业解答。同时,此举为HarmonyOS应用开发者提供了新的技术参考,激发了更多创新应用场景的开发,助力打造差异化竞争优势,推动HarmonyOS生态繁荣发展。
741 68
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
|
自然语言处理 API 数据安全/隐私保护
InstaGraph:将文本和URL转化为知识图谱的强大工具
InstaGraph 可以将文本或 URL 转化为美观的知识图谱,帮助你更清晰地理解复杂主题中不同实体之间的关系,InstaGraph 的自然语言处理能力是由 OpenAI 的 GPT-3.5 技术提供支持的。
|
机器学习/深度学习 算法 Java
矩阵运算在数据分析中的应用
矩阵运算在数据分析中的应用
|
网络协议 网络虚拟化 虚拟化
|
自然语言处理 Python
Python运算符列表及其优先顺序、结合性
本文表格对Python中运算符的优先顺序进行了总结,从最高优先级(最先绑定)到最低优先级(最后绑定)。相同单元格内的运算符具有相同优先级。除非句法显式地给出,否则运算符均指二元运算。
339 0
|
算法 Java 测试技术
华为OD:求字符串中所有整数的最小和
华为OD:求字符串中所有整数的最小和
398 0
|
存储 自然语言处理 PyTorch
bert中文文本摘要代码(1)
bert中文文本摘要代码(1)
261 0
|
安全 Linux 网络安全
【分享】非常全面的CentOS7系统安全检测和加固脚本
【分享】非常全面的CentOS7系统安全检测和加固脚本
1637 0
【分享】非常全面的CentOS7系统安全检测和加固脚本