原创小于 1 分钟
DragonOS
Rust开发的服务器操作系统
友链
龙进的技术笔记 - LJ's Blog
什么是gRPC
前期准备
在本篇内容中,我们将通过go+gin+gRPC
的组合来初步认识gRPC,并实现一个简单的网关应用
Go环境安装
略
创建项目
mkdir app-gateway
cd app-gateway
go mod init app-gateway
原创大约 3 分钟
大约 32 分钟
大约 22 分钟
获取Linux源码
- 略
编译Linux内核
cd /linux
export ARCH=x86
make x86_64_defconfig
# 如果想要更好的clangd补全就用clang编译(make CC=clang x86_64_defconfig ) ,但是clang在部分模块可能需要特殊的编译选
# 项才能编译,所以还是推荐用默认的gcc编译,尽管这样clangd的效果会差一点
# ./scripts/config --file .config -e CONFIG_NUMA_BALANCE CONFIG_NUMA_BALANCING_DEFAULT_ENABLED CONFIG_NUMA
# Todo 还有一些nuuma_balance相关设置项要打开,不然后面要在编译时手动选择Y
大约 2 分钟
前言
写给华工软院学生
- 2021级编译原理考试难度较低,复习优先级低,不建议花太多时间准备。虽然根据老师不同(以徐老师为例),可能上课的内容比较深入,让学生产生了这门科目难度很大的错觉。诚然要彻底理解编译原理需要花费大量的时间,但考试内容基本都是简单的算法,只要把几个重要算法理解了,都不需要把每个概念搞的非常清楚,考试都基本不会出问题。
- 编译原理博大精深,作为计算机底层设计的一部分,课堂上教授的内容少之又少,甚至可以说和一些工程实践是
严重脱钩
的,比如上课会花很大的精力教你自动机和自动机的相关算法,但是在实际工程运用中,我们有诸如lexer
的工具帮我们完成这个工作,而且如果是编写一个简单的词法分析器,甚至只需要简单的最长字串匹配
就能实现一个词法分析。仅凭课堂上学的内容,大概率连怎么写一个 TinyC(精简版的C语言) 都不知道。感兴趣的同学可以认真钻研一番,这对编程能力会有极大的提高。
原创大约 2 分钟
Chapter1 编译器组成
编译器的结构
- 词法分析Lexical analysis (Scanning)
- 语法分析Syntax analysis (Parsing)
- 语义分析 Semantic analysis
相关信息
以上三步的目的是通过分析输入代码,生成能被统一处理的中间层代码,亦即编译器前端(front-end)
原创小于 1 分钟
Chapter2 词法分析
大纲
- 扫描过程 Scanning Process
- 正则表达式 Regular Expressions
- 有限自动机 Finite Automata(NFA(nondeterministic 非确定性有限自动机) and DFA(deterministic 确定性))
- RE转换NFA(McNaughton-Yamda-Thompson algorithm)
- NFA 转换DFA(子集算法 Subset construction Algorithm)
- 最小化DFA(State-Minimization Algorithm)
原创大约 6 分钟
Chapter3 语法分析
- 正则表达式的能力有限,无法分析具体的语法细节(例如嵌套、的n值),与其等价的有穷自动机同理,因此引入了下推自动机和上下文有关、无关文法
大纲
- 语法分析的形式化——上下文无关文法
- 语法分析算法
上下文无关文法(CFG)
- 是用来描述一个编程语言的语法结构的文法
- 和正则表达式一样,可以表示递归的规则,而且更强大
- 是正则表达式的严格超集
Chomsky语言层级
原创大约 16 分钟