首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
编译多端
订阅
it追寻
更多收藏集
微信扫码分享
微信
新浪微博
QQ
44篇文章 · 0订阅
使用llvm实现一门语言 —— cava
本文将介绍如何使用llvm+bison+flex技术实现一门编程语言。 以我们实现的cava语言为例,介绍编译器各阶段,词法分析 -> 语法分析 -> 语义分析 -> 中间代码优化 -> 目标代码生成,最终生成汇编指令,再由汇编语言根据不同的指令集生成对应的可执行程序是如何实现…
简单介绍下各种 JavaScript 解析器
在说js解析器前,我们需要先了解下ESTree这个项目,这个项目的初衷通过社区的力量,保证和es规范的一致性,通过自定义的语法结构来表述JavaScript的AST,后来随着知名度越来越高,多位知名工程师的参与,使得变成了事实意义上的规范,目前这个库是Mozilla和社区一起维…
数据结构之栈——算术表达式求值
栈是一种特殊的线性表,它只能在一端进行插入或者删除操作,能进行操作的一端称为栈顶,另一端则称为栈底。也由于这个特性,导致先进入的元素,只能后出,因此栈是后进先出的线性表。 栈是一种线性表,因此它的存储可以是链式存储,也可以是顺序存储。链式存储的栈,称为链栈,顺序存储的栈,称为顺…
四则运算表达式如何转换成AST
晓强哥在他的上篇文章里介绍了 里面提到获得抽象语法树的过程为:代码 => 词法分析 => 语法分析 => AST,抱着深究技术细节的目的,我决定研究这里的词法分析和语法分析,写一个简单的四则运算表达式转换成AST的方法,于是就有了下面的内容。 人类习惯 a + b 这种表达叫做…
栈应用 : 中缀表达式转后缀表达式求值
中缀表达式 确实,中缀表达式很符合人类的思想,但是让计算机理解起来却不那么容易,这里我们引进了==后缀表达式== 后缀表达式(也称为逆波兰表达式) 为了解释后缀表达式的好处,我们先来看看,计算机如何应
算数四则混合运算表达式求值
#include <stdlib.for (int i = 0; i < exp.if ((exp[i] >= '0' && exp[i] <= '9') || exp[i] == '.while ((exp[i+1] >= '0' && exp[i+1] <= '9') || ...
算术表达式解析系列之优先级爬升法
建议先阅读上篇,本篇不重复介绍一些基本的概念。 再这篇文章里面,将介绍一种完全不同的解决方案,Precedence Climbing Method,下称优先级攀爬算法。 这种算法,在手写一些表达式解析器的时候,经常会使用。 下面开始实现,代码使用 ts 做演示。 tokeniz…
算术表达式解析系列之逆波兰表示法
假如我们有这样的一个需求,接受一个用户录入的算术表达式,解析并计算出结果。 本系列文章,将提供几种不同的解决方案。本篇将介绍一种常见的方案:“逆波兰表示法”。 首先我们先了解一些概念。 中缀表示法,应该是我们最常接触的算术表示法了。该表示法,操作符位于两个操作数中间,因此而得名…
从零写一个编译器(九):语义分析之构造抽象语法树(AST)
从推导式可以看出,DEF节点的符号应该在valueStack.size() - 3,但是DECL和VAR_DECL没有做reduce操作,所以符号应该在valueStack.size() - 2。这其实和前面的符号表构建算出之前符号的位置是一样的。 其实构造AST和创建符号表上…
前端与编译原理——用JS写一个JS解释器
说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念。作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于“抽象语法树(AST)”。但这仅仅是个开头而已。编译原理的使用,甚至能让我们利用JS直接写一个能运行JS代码的解释器。