1 Star 4 Fork 2

whtoo / How_to_implment_PL_in_Antlr4

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

从解释计算的视角:如何亲手创造一门编程语言Cyson

每一个watch和star都是这场梦幻之旅的⛽️与干柴 Security Status 兴❤️如🔥,其势如风.意许如油,汩汩不息。

1. 全局鸟瞰

  • ep1--antlr支持的EBNF语法描述hello world示例。
  • ep2--如何使用g4描述形如{1,2,{3,4..}...}的数组,并在listener中print它。
  • ep3--实现一个只包含加减乘除的微型计算器。
  • ep4--实现一个可以进行简单交互的算术计算器。
  • ep5--实现一个Java接口提取工具。
  • ep6--实现一个CVS提取器。
  • ep7--实现一个JSON解析工具。
  • ep8--抽象语法书提取器
  • ep9--ep4增强版本
  • ep10--ep6的另一种实现
  • ep11--基于ep8的算术解释器(AST Tree walking)
  • ep12--ep11增加赋值语句和变量声明。
  • ep13--ep11另一种简化实现。
  • ep14--实现符号表记录。
  • ep15--实现变量的作用域确定。
  • ep16--实现变量的消解和类型检查,并实现函数作用域与有函数调用的脚本求值。
  • ep17--实现函数的静态声明依赖(并不是我心里想的调用图生成,但是还是加上吧,让其他人避坑。)
  • ep18--采用栈解释器,目前很简陋。增加VM指令,更新VM设计文档
  • ep19--实现简单的struct(实现闭包),目前实现了最简单的record类型和main函数以及file作用域下一章增加类方法和协议支持
  • ep20--重点放在IR和字节码生成,生成的字节码目标机就是我们ep18实现的VM。这么做的原因是这个过程足够简单、精确地表现编译后端中最重要的一步是如何执行的。
  • ep21--TAC生成、SSA与CFG。[WIP]

番外

❤️👀: 终于写完了,感觉好忐忑。不过,我还有另外几个也是编译原理相关的坑也要填。

首先,我得感谢父母,他们给了我莫大支持。

其次,感谢我自己和我的妻子,如果不是我们的相遇我永远也不能写完。

最后,感谢这个时代,我需要的一切都在这个时候刚刚好到来。


2. 为什么会有这个系列的教程?

我从开始编程就一直在想,如果我是一个意图规划者, 而不是人肉编码器该有多好。

因此,我一头扎进了编程语言构造和分析的汪洋大海中去捞 那根我心中的定海神针。

现在,我真正走进了编译后端处理和程序分析后,我感到自己 有太多想记录的知识、技能、想法,以及创造好用的新工具和新过程。

所以,这就是我的起点,希望你能和我一样享受这个过程。

3. 工程体系介绍

整个工程需要3种外部环境支持。

  • a. JDK18+ is required. (JDK环境需要>= 18,我本地是openJDK 18)
  • b. Antlr4 runtime support.(lib已经有了,并且我在ant构建文件中已经写好了。)
  • c. Ant support. (Mac:brew install ant,其他平台:Baidu一下Ant安装)。

3.1. 目录如下所述:

  • src: the folder to maintain sources
    • org/teachfx/antlr4 -- top package name.
      • ep${num} -- num in {1,2,3,...,25}
      • current num is 20
  • lib: the folder to maintain dependencies

3.2. 从哪儿开始?

当所有依赖都安装完毕后,以ep20为例

cd your_project_dir

cd ep20

ant gen

ant run

3.3. 如何从Ant构建并运行工程

这部分就是Ant的一般使用,我之前是参考《Ant使用指南》--一本很老的书。 大家可以百度一下,教程很多我就不浪费篇幅了。

4. 参考或者模仿材料来源

4.1 如何解释一个程序

4.2 如何实现一个计算器

BSD 3-Clause License Copyright (c) 2023, whtoo All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

简明自制编程语言教程,依赖antlr4及其类库。可以看作笔者整理并合并其他相关书籍的产物。 展开 收起
Java 等 3 种语言
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/whtoo/How_to_implment_PL_in_Antlr4.git
git@gitee.com:whtoo/How_to_implment_PL_in_Antlr4.git
whtoo
How_to_implment_PL_in_Antlr4
How_to_implment_PL_in_Antlr4
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891