首页 > 其他分享 >编译实践学习 Part1

编译实践学习 Part1

时间:2024-03-09 22:14:44浏览次数:27  
标签:编译 AST 实践 Lv Part1 Bison 拆分 文档

本文采用 CC BY 协议发布。

闲话

开新坑辣!

参考 PKU 的文档做的。

为什么会做这个呢?之前看一位退役 OIer 的 Blog 然后发现了这个文档,想着自己退役之后也要做一个。主要是被文档最后的 awesome-sysy 吸引了。

其实之前我在 OI 里也写过 CYaRon!语编译版本,所以算是有 Bear 来...?

开始前的准备

编译器是什么呢?大概是下面的一个东西。

  1. 输入一长串字符
  2. 拆成一堆短字符串
  3. 进行一堆运算
  4. 翻译成一长串字符

先看 step 1~2. 如何优雅地拆分输入的源代码呢?显然我们需要一个工具。

它就是 Flex 和 Bison。Bison 负责定义拆分成什么样,Flex 负责具体的拆分工作。

不用担心不会用,基本就是 C/C++ 语法,再加一些独有的东西。

但是先别急,在此之前要先配好环境,具体见 文档

EBNF

EBNF, 即 Extended Backus–Naur Form, 扩展巴科斯范式。

形如 A ::= B

大概类似于 #define?反正就是一通替换最后换无可换的时候就拆分完了。

具体细节还是要看原文档。

Hello World!

抽象语法树 (abstract syntax tree, AST)

定义几个类作为 AST 的组成部分。

然后一通返回指针就完事了。

目前的进度是输出 Lv 1.3 的内容。

UPD:git 不会用,被我玩炸了。现在进度回档到 Lv 1.2 了。

标签:编译,AST,实践,Lv,Part1,Bison,拆分,文档
From: https://www.cnblogs.com/x383494/p/18063456

相关文章

  • 不得不做,敏感词过滤最佳实践
    因为在博客里上线了评论的功能,但是为了防止有些人发一些敏感词汇,所以做这个敏感词过滤是非常有必要的(这也是为啥我不愿意在评论中加图片一样,假如有人发一些奇怪的图片咋整......
  • windows下体验quarkus原生编译打包
    基础本机是win10GraalVM21.0.2,用的社区版的最新版本,并配置其bin目录加入环境变量Maven3.96,用的最新版本IDEA,本机版本2023.2.5VisualStudio202217.9.2,用的社区版最新版本,quarkus官网提到过VisualStudio2017VisualC++BuildTools,可能2017或更高版本的这个也可以,但是......
  • 分布式锁实践
    分布式锁实践安装工具正常是需要在linux安装redis(官方推荐),为了方便在开发环境中,使用windows版本的redisGitHub-redis-windows/redis-windows:Redis6.0.206.2.147.0.15forWindows下载release版本,根据readme,在服务中注册,并启动redis:redis-windows/README.zh_CN.mdatm......
  • ubuntu22.04编译创龙T113-i mini的SDK
    ubuntu版本22.04.11.解压安装包拷贝sdk并解压出来,注意安装包较大请预留好硬盘空间2.预安装编译应用先安装如下应用,在编译过程中需要使用到的依赖sudoaptinstallbuild-essentialcmakeflexbisonu-boot-toolsopenssllibssl-devtexinfo3.安装和更换python2编译使......
  • python3.7.4 RV1126 交叉编译
    首先,十分感谢大佬分享的交叉编译攻略,原文链接如下:https://www.cnblogs.com/Se7eN-HOU/p/16736164.html在此基础上,本人经过一周时间的踩坑,终于在RV1126开发板上实现了交叉编译。现记录本人实际编译版本与上述版本略有不同之处。主要是由于3.5.2版本的python和openssl1.0.2g在......
  • [Linux] RockyLinux 9 编译安装 davfs2
    官网:davfs2-Summary[Savannah](nongnu.org)下载地址:Indexof/releases/davfs2/(nongnu.org)下载最新版wgethttps://download.savannah.nongnu.org/releases/davfs2/davfs2-1.7.0.tar.gztarzxvfdavfs2-1.7.0.tar.gzcddavfs2-1.7.0mkdirbuild&&cdbuildCFLA......
  • day58 动态规划part15 代码随想录算法训练营 392. 判断子序列
    题目:392.判断子序列我的感悟:理解难点:听课笔记:我的代码:通过截图:代码易错点:老师代码:扩展写法-双指针:classSolution:defisSubsequence(self,s:str,t:str)->bool:#初始化两个指针,分别指向s和t的第一个字符i,j=0,0#......
  • day57 动态规划part14 代码随想录算法训练营 53. 最大子数组和
    题目:53.最大子数组和我的感悟:理解难点:递推公式想错了。听课笔记:我的错误的代码:通过截图:代码易错点:老师代码:扩展写法:资料:......
  • 使用ilasm 和 ildasm编译和反编译工具对DLL文件修改
    目录前言一、使用ildasm反编译dll文件二、使用ilasm将il文件编译成dll或exe文件前言文本讲述怎么通过ildasm工具将dll文件进行反编译为il文件,修改il文件后再如何通过ilasm工具将il文件反编译成dll或exe文件。ildasm工具:用于将dll文件反编译成可读......
  • day57 动态规划part14 代码随想录算法训练营 1035. 不相交的线
    题目:1035.不相交的线我的感悟:换汤不换药理解难点:换了个壳子听课笔记:多理解这个题意我的代码:classSolution:defmaxUncrossedLines(self,nums1:List[int],nums2:List[int])->int:#因为强调顺序,所以跟1143最长公共子序列是一样的dp......