首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
KevinOfNeu
掘友等级
资深 Android 开发工程师
|
饿了么
自顶向下, 深入浅出
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
182
文章 176
沸点 6
赞
182
返回
|
搜索文章
最新
热门
手拉手教你实现一门编程语言 Enkel, 系列 11
Java 中没有默认参数是我感觉最不爽的一点。有些人建议我使用 Builder 模式,但是我觉得这样会产生大量的模板代码。我一直搞不懂为何 Java 这么久以来忽略了这个特性。虽然实现起来并不困难。 这两个概念非常容易被混淆。简单说来就是: 方法调用的时候传递的表达式是实际参数…
手拉手教你实现一门编程语言 Enkel, 系列 10
1. 语法规则更改 ifStatement 是语句,因此可以子在 trueStatement 或者 falseStatement 使用(形如 if ... else if ...else ) 条件表达式的目的是比较两个表达式,并且返回另一个表达式(布尔值)。 如图所示,第二个 …
手拉手教你实现一门编程语言 Enkel, 系列 9
1. 语法规则改动 我们新建一个规则 “returnStatement”。 这听起来有点绕口,但是返回值并不总是返回一个值。在 Java 中,代码 int x = return 5; 没有意义, 在 Enkel 中也是如此。换句话说,表达式总可以给一个变量赋值。这就是为什么返回…
手拉手教你实现一门编程语言 Enkel, 系列 8
1. 语法改动 本节需要改动的语法规则仅是 "expression"。 表达式通俗来讲就是求值(方法调用,值,变量引用等)。 而语句会做一些操作,但不一定会产生值,例如 if 语句。 # 标号表示为当前规则创建可选的回调。Antlr 会在 ENkelVisotor 中生成诸如 …
手拉手教你实现一门编程语言 Enkel, 系列 7
1. 方法 到目前为止,我们可以在 Enkel 中声明类和变量,但是他们都处于同一个全局作用域中。下一步,我们需要支持方法。 2. 作用域 对象 scope 是在类创建的时候被创建的,然后传递给下一层级(方法)。下一层级拷贝并且添加其他的选项。 3. 签名 函数调用的时候,需要…
手拉手教你实现一门编程语言 Enkel, 系列 6
之前的章节中,我都使用了 listener 来实现 Enkel 的解析器。Antlr 提供了另一种方式-- Visitor。我们需要在命令里加 -visiotor 来显示的开启。 我专门写了一篇博客,来探讨究竟哪种方式更适合 Enkel 的编译器设计和实现。 更少的 BUG。无…
手拉手教你实现一门编程语言 Enkel, 系列 5
上一节中,我们定义了 Enkel 语言的特性。本节中我们来实现 “类”。 另外一点改动是: 输出的 .class 文件名字以类名为依据,而不是以 .enk 文件名字为依据。
手拉手教你实现一门编程语言 Enkel, 系列 4
上一节中,我们已经实现了 Enkel 语言的原型实现。本章我们需要定义好 Enkel 的语言特性。 众所周知,Java 中有很多冗余的部分。Java 尽可能的避免让你犯错,因此我们有时候需要写大量的重复性代码。 我们的目标是让 Enkel 尽可能的简单。简单带来的缺点显而易见,…
手拉手教你实现一门编程语言 Enkel, 系列 3
0. 自顶向下的方式 开发一门语言不是短期任务,我将以自顶向下的视角来开发。为了避免陷入每个模块的实现细节,我准备先宏观的描述每个模块,然后在每个迭代,我将慢慢加入更多的细节加以完善。 1. 代码 作者原来的代码是 Maven 工程,译者这里改成了 Gradle(译者熟悉 Gr…
手拉手教你实现一门编程语言 Enkel, 系列 2
词法分析器的职责是把简单的文本输入,识别为 Token(可以理解为一种记号),代码,即文本文件在词法分析之前,仅仅是无意义的字节流而已,但 Token 不同,Token 记录的类型信息对接下来的步骤很重要。 语法分析器的职责是把 Token 序列输入,组织成具有层次结构的抽象语…
下一页
个人成就
文章被点赞
116
文章被阅读
22,510
掘力值
412
关注了
17
关注者
18
收藏集
1
关注标签
24
加入于
2016-09-21