“这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
一、本堂课重点内容:
本堂课的知识要点有哪些?
- 了解规则引擎的组成部分和应用场景。
- 学习并掌握规则引擎的设计与实现原理。
- 明确一个规则引擎的设计目标,并完成各部分的设计与实现步骤拆解。
- 动手实现规则引擎项目,完成预定目标。
二、详细知识点介绍:
- 本堂课介绍了哪些知识点?
课前知识:编译原理基础知识入门
首先理解什么是编译器:
将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。
源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。 一个现代编译器的工作流程:源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables)
编译过程前端部分分析:
- 词法分析(Scanning/Lexing):将源码切分为记号(token/lexeme)序列。类似于自然语言中的词汇。
- 语法分析(Parsing/Syntactic Analysis):解析语句(statement)。类似于自然语句中的句子,识别标识符表达式是否合法等。比如
x = a+b*/;在语法上就是非法的。语法分析可以本地检查,也就是上下文无关,拿到一条语句就可以检查它的语法是否合法。 - 使用文法(Grammar)定义合法的语句。
- 语义分析(Semantic Analysis):语法上合法的语句可能语义上没有意义。语义是上下文相关的,比如表达式必须需要其中的变量有定义,且能够进行表达式中的运算。上下文存放在符号表中,解析到变量声明时就会在符号表中创建一条新的记录,当用到时就需要从符号表中查找它的含义。比如将一个指针进行除法就是没有意义的
char* p; int x; x = p / 10;。 - 前端生成结果一般是AST或者其他的线性的中间代码(IR)
三、实践练习例子:
- 有什么实践举例帮助理解知识点?
通过实现一个支持简单逻辑、算数运算符和bool,int,string类型的编译器,了解编译器大致实现流程。
四、课后个人总结:
- 本章有什么知识点不容易掌握?
- 什么地方容易与其他内容混淆?
五、引用参考:
- 我参考了哪些外部博客/笔记/文章?
- 文章中有什么地方是我参考引用了外部博客/笔记/文章的?
参考链接: JustAToyCCompiler/jatcc.md at master · tch0/JustAToyCCompiler (github.com)