设计模式的理解:解释器模式 interpreter -ag凯发k8国际
解释器模式(interpreter pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 sql 解析、符号处理引擎等。
这种模式的难点主要是文法解析算法的设计,需要了解些编译原理的知识。
所谓终结符,就是文法中不可再细分的字符,例如关键字,变量,运算符,结束符,常量等。 非终结符就是还可以再划分的东西,例如 条件表达式,算术表达式,代码块等
编译的步骤分为四大步骤:
1)词法分析 : 把输入的字符串拆分成单词,判断出哪些单词是 运算符,介词(关键字),数字,变量名。创建单词对象
2)语法分析 : 语法分析有自上而下和自下而上两种分析方法,用来判断语法是否规范。
3)语义分析 :用来判断在语法正确的情况下是否符合语义,将输入的表达式变成一种规范的格式。
4)目标代码生成:将这些包含语义,格式规范化的对象进行操作,生成出目标代码;
例如这样的一个文法:
while 布尔表达式 then 代码块 end;其中 while ,then,end 就是终结符 , 布尔表达式 和代码块就是非终结符。非终结符可以再划分,例如
//b代表布尔表达式,c代表代码块则,i代表常量和变量 c->%c% //最开始的文法表达式 c->b //代码块可以是一个 布尔表达式 c->b ;c //代码块可以是一个 布尔表达式 ; 代码块 b-> i //布尔表达式可以是单个变量或常量 b-> i >i //布尔表达式可以是 单个常/变量 > 单个常/变量 b-> i < i //布尔表达式可以是 单个常/变量 < 单个常/变量 b-> i == i //布尔表达式可以是 单个常/变量 == 单个常/变量 b-> b && b //布尔表达式可以是 布尔表达式 && 布尔表达式 b-> b || b //布尔表达式可以是 布尔表达式 || 布尔表达式 b-> !b //布尔表达式可以是 !布尔表达式例如我输入 mynum >8 && mynum < 20 ;
首先第一步,给输入的表达式的加上开始符,"%mynum >8 && mynum < 20%";之后将要拆分单词,判断出 mynum 是变量 , “>” 是一个终结符, “8”是一个常量 ,“&&”是一个非终结符,mynum 是变量, “<” 是一个终结符, “20”是一个常量
第二步就是到了代码”稳定”的部分: 根据输入的单词对象,判断能不能反推回最开始的文法:
"%mynum >8 && mynum < 20%" 将变量和常量替换成i “% i >i && i
第三步也是代码”稳定”的部分,语义分析:要对每个终结符进行相应的判断操作 例如 < ,> ,==,&&的操作逻辑,将操作的逻辑,结果用对象进行封装。通常采用三元式表示或者四元式表示的方法。
第四步目标代码生成:就是解析三元式或者四元式,生成出代码。
当然第四步在编译原理中是为了代码生成,而在解析器场景中一般是为了得出一个结果。
具体的案例可以参考(没用模式,写的很烂)
词法分析:https://blog.csdn.net/supersmart_dong/article/details/79164260
语法/语义分析 :https://blog.csdn.net/supersmart_dong/article/details/79169332
目标代码生成 :https://blog.csdn.net/supersmart_dong/article/details/79187150
总结
以上是ag凯发k8国际为你收集整理的设计模式的理解:解释器模式 interpreter的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 设计模式的理解: 访问器模式 visit
- 下一篇: 设计模式的理解:对23个设计模式的总结