规则引擎的设计与实现| 青训营笔记

77 阅读3分钟

“这是我参与「第五届青训营 」伴学笔记创作活动的第 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类型的编译器,了解编译器大致实现流程。

link.juejin.cn/?target=htt…

四、课后个人总结:

  • 本章有什么知识点不容易掌握?
  • 什么地方容易与其他内容混淆?

五、引用参考:

  • 我参考了哪些外部博客/笔记/文章?
  • 文章中有什么地方是我参考引用了外部博客/笔记/文章的?

参考链接: JustAToyCCompiler/jatcc.md at master · tch0/JustAToyCCompiler (github.com)