欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解:解释器模式 interpreter -凯发k8官方网

发布时间:2024/10/14 asp.net 31 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 设计模式的理解:解释器模式 interpreter 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

解释器模式(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

总结

以上是凯发k8官方网为你收集整理的设计模式的理解:解释器模式 interpreter的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图