4.编译原理 | 青训营笔记

88 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

很久没写笔记了,今天写一下吧。

1.规则引擎组成部分及应用场景

例子:购买产品,获得积分,有一个规则:不同价格价格获得积分不同,区间判定规则总是修改,找一个系统,条件拆成规则,价格放进去自动生成积分。

输入:计算规则,商品价格,用户标签,商品属性

输出:积分

规则简单容易配置,可扩展。

规则引擎是嵌入在程序中的组件,实现了将业务决策从应用程序代码中分离出来,使用预定义语义模块编写业务决策,接收数据输入,解释业务规则,并根据业务规则做出业务决策。

解决了开发人员重复编码的问题,业务决策与本身解耦,提高服务的可维护性,缩短开发路径,提高效率。

组成部分

数据输入:

规则理解:预定义的词法,语法,优先级,运算符等。

规则执行:

2.编译原理的相关概念

词法分析 一个字符串分解成多个token

源代码字符串转换词法单元,有一些规则做切分,切分是用词法来切分的。

有限自动机:n个状态,随便给个输入,都有一个确定的状态转换。

抽象语法树

表达式的语法结构可以用树来表示

构建方法是:

上下文无关语法(无须上下文就可以判断正确性)  BNF来表达

递归下降算法

BNF表达式自顶向下构造语法树

不断的对语法进行展开,流下降方式对语法进行展开,

语法分析

类型检查:编译时检查,运行时检查

3.设计一个规则引擎

设计一个规则引擎,支持特定的词法,运算符,数据类型和优先级,并且支持基于以上预定义语法规则表达式的编译和执行。

词法

可以扩展一些运算符

4.自行实现一个Web版规则引擎