avatar
文章
464
标签
16
分类
76

Believe it

Believe it

跟我一起自己写编译器-123.引言
发表于2021-06-24|编译器
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 1. 引言想做编译器很久了,大学期间留下了不少遗憾,没有实现自己的编译器,没有实现自己的JVM,没有实现自己的数据库,当然这其中有很多原因,比如学院的要求太松,比如自己也不够主动,经过两个多月的学习,笔者的Pava1.0以及Pava编译器已经发布,这篇Blog主要介绍理论,将引导读者一步一步构建一个自己的编译器。 2. 学习重点开发编译器我能学到什么?编译器本身吗?其实不对,我们设计编译器的时候,会遇到很多问题,解决这些问题的方法才是最终重要的东西。 3. 编译器的流程从头开发一个编译器是非常困难的,这涉及到很多知识点,这一部分主要介绍现代编译器的架构。 龙书上把编译器分为前端和后端两个部分,源代码首先经过前端转化为中间代码,中间代码经过后端转化为汇编文件。此后的工作就不是编译器的管理范围了,接下来由汇编器和链接器将汇编文件转化为可执行文件。 12graph LR 源代码 --编译器前端-- ...
Educational Codeforces Round 112 (Rated for Div. 2)
发表于2021-08-01|ACM刷题实战CodeForces
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 比赛链接https://codeforces.com/contest/1555 1. A. PizzaForces1.1. 题意6元15个物品,8元20个物品,10元25个物品 现在需要买至少n个物品,问需要多少钱 1.2. 做法首先看单价,发现他们都相同,然后就是尽量不要多买了。 如果n比15,20,25的最小公倍数的两倍还要大,则多出的这一部分,可以考虑直接购买6元的,剩下的小范围dp即可 核心思想: 大范围贪心,小范围dp notes: 注意一定是至少两倍以上才能贪心 1.3. 代码1234567891011121314151617181920212223242526272829303132333435#include <bits/stdc++.h>using namespace std;int main() { std::ios::sync_with ...
Codeforces Round #734 (Div. 3)
发表于2021-07-24|ACM刷题实战CodeForces
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 比赛链接https://codeforces.com/contest/1551 1. A. Polycarp and Coins1.1. 题意给你一个数n,你要把他拆为$c_1+2c_2$的形式,你需要最小化$c_1$和$c_2$的差 1.2. 做法对模3的余数进行分类讨论 1.3. 代码123456789101112131415161718192021222324#include <bits/stdc++.h>using namespace std;int main() { std::ios::sync_with_stdio(false); cin.tie(); int step; cin >> step; while (step--) { int n; cin >> n; ...
UML图表指引
发表于2021-07-21|UML
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial UML 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。 摘自: 维基百科,自由的百科全书 类图类图主要描述的是类与类之间的关系,这些关系分为泛化关系(generalization)、实现关系(realize)、聚合关系(aggregation)、组合关系(composition)、关联关系(association)、依赖关系(dependency) 泛化关系泛化即类的继承,自行车继承车,猫继承动物, 所以自行车是车的泛化,猫是动物的泛化,男人是人的泛化 (箭头应该是空心) 1234classDiagr ...
VK Cup 2021 - Elimination (Engine)
发表于2021-07-18|ACM刷题实战CodeForces
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 比赛链接VK Cup 2021 - Elimination (Engine) 1. A. Binary Decimal1.1. 题意给你一个十进制数,你要把它拆成多个只由0和1组成的十进制数之和,问最少拆几个。 1.2. 做法答案就是十进制数每个位上的数中的最大值 1.3. 代码1234567891011121314151617181920#include <bits/stdc++.h>using namespace std;int main() { std::ios::sync_with_stdio(false); cin.tie(); int n; cin >> n; while (n--) { int x; cin >> x; int mx = 0; ...
Codeforces Round #729 (Div. 2) - E1
发表于2021-07-16|ACM刷题实战CodeForces
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 题目大意:你需要计算有多少对满足长度为n的排列$p$和$q$,满足$p$字典序>$q$ 且 $inv(p)<inv(q)$,答案取模 $inv$ 为逆序对个数 做法:设$f(i,j)$为长度为$i$、逆序对个数为$j$的排列的个数 , 考虑第一个数字为$t$ $f(i,j) = \sum_{t \in [1,i]} f(i-1,j-t+1)$ 一个填$u$,另一个填$v$ $u<v$ $$\begin{aligned}ans[i] \&= i * ans[i-1] + \sum_{1<=u<v<=i, x+u>y+v} f(i-1,x)\cdot f(i-1,y) \&= i * ans[i-1] + \sum_{x-y>v-u, 1<=u<v& ...
通过开源项目获取jetbrains全家桶License
发表于2021-07-09|Others
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial JetBrains License不要用破解版本的JetBrains软件OK?凭自己的能力获取他的License不行吗? 先来看看这个页面,这里介绍了开源项目的定义 满足开源定义。 正在积极开发中,即在过去 3 个月内定期提交新代码提交。 不提供开源软件的付费版本或围绕开源项目的任何商业服务(例如付费支持、咨询等)。 不由商业公司或组织(非政府组织、教育、研究或政府)资助的。 不为核心项目开发商付钱。 换句话说,只要你有一个在过去 3 个月内定期提交的开源项目,且非商业模式,你就可以获取JB的License 然后你就来这里申请 几天后就能给你结果了
redis源码
发表于2021-06-26|Database
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 版本使用6.2.4 sds.h sds.c内存对齐__attribute__((__packed__))可以让编译器对结构体不进行内存对齐,详细参考 1234567891011121314151617181920212223242526#include <stdint.h>#include <stdio.h>struct __attribute__((__packed__)) sdshdr64 { uint64_t len; /* used */ uint64_t alloc; /* excluding the header and null terminator */ unsigned char flags; /* 3 lsb of type, 5 unused bits */ char buf[]; ...
Flink学习
发表于2021-06-08|大数据
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 运行源码我们将运行1.13.0版本的Flink,其scala环境为2.12 Step1. 获取学习项目1git clone https://github.com/fightinggg/flink-src-study.git --recursive 在这个项目中,笔者把flink源码作为了一个git submodule放置于文件夹flink中,用来临时查看,当然我个人不建议看这些代码,因为这个文件夹太大了,IDE都不能很好的处理他。 然后就可以直接运行了 Step2. Enjoy It现在你可以直接从这里进入flink的控制台http://localhost:8081, 你也可以直接在ideal中调试flink。 Step3. Debug自己设断点就好了。 使用Flink下面使用flink-examples-streaming_2.12-1.13.0来演示 执行环境这个包下的所有的ex ...
自己动手写Docker
发表于2021-04-16|Docker
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 容器与开发语言容器随着云计算领域的兴起,容器这个词出现了,但是什么是容器? 容器英文名Container,是基于Linux Namespace以及Cgroups技术实现的具备隔离特性的一组进程。 OK,他是一组具备隔离特性的进程。 虚拟机虚拟机是使用Hypervisor技术提供的虚拟化硬件的操作系统。 OK,虚拟机是一个操作系统。 操作系统和进程的区别操作系统是管理软件、硬件的一组进程。 GO这里不做介绍(其实我只能看懂一点点Go代码,没时间学,后面有机会再出这方面的Blog吧) 基础技术Linux NamespaceNamespace即为名称空间,这是一个树状的结构,父名称空间可以看到子名称空间的所有内容,反之则不行。这类似于Spring框架的父子Beanfactory。 Linux 一个实现了6个不同的Namespace Namespace 类型 系统调用参数 备注 ...
1…345…47
avatar
fightinggg
O ever youthful, O ever weeping
文章
464
标签
16
分类
76
Follow Me
公告
This is my Blog
最新文章
智慧的疆界:从图灵机到人工智能2023-05-17
Transformer2023-03-28
2023你好2023-02-06
VPN与代理那些事2022-07-24
CPU架构介绍2022-07-19
分类
  • ACM238
    • 刷题实战56
      • CodeForces7
      • bzoj4
      • hdu19
      • uoj1
      • 比赛15
      • 洛谷3
标签
AI AspectJ CPU docker 结构体中的引用 SpringFox使用 跟我一起写编译器 GPT linux指令 读书,HTTP 读书 flag Transformer Proxy VPN nginx
归档
  • 五月 20231
  • 三月 20231
  • 二月 20231
  • 七月 20223
  • 五月 20221
  • 三月 20221
  • 二月 20221
  • 一月 20221
网站资讯
文章数目 :
464
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2023 By fightinggg
框架 Hexo|主题 Butterfly