当前位置: 首页 > news >正文

广州兼职网网站建设高端网站设计定制

广州兼职网网站建设,高端网站设计定制,凡客诚品电话,wordpress进不去数据库目录 解释器模式(Interpreter Pattern) 解释器模式的核心角色: 优缺点 代码实现 解释器模式(Interpreter Pattern) 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式&am…

目录

解释器模式(Interpreter Pattern)

解释器模式的核心角色:

优缺点

代码实现


解释器模式(Interpreter Pattern)

        解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

解释器模式核心角色

  • 抽象表达式(Abstract Expression):定义了抽象的解释器接口,用来解释语言中的元素,可以是终止符,也可以是非终止符。
  • 终止符表达式(Terminal Expression):实现了抽象表达式中的解释器接口,用来存储语言中的终止符,它们不需要再次解释,通常会返回具体的结果。
  • 非终止符表达式(Nonterminal Expression):也实现了抽象表达式中的解释器接口,用来存储语言中的非终止符。
  • 上下文(Context):存储解释器解释的信息,并调用解释器进行解释。

优缺点

(1)优点:

  • 可扩展性比较好,灵活。
  • 增加了新的解释表达式的方式。
  • 易于实现简单文法。

(2)缺点:

  • 可利用场景比较少。
  • 对于复杂的文法比较难维护。
  • 解释器模式会引起类膨胀。
  • 解释器模式采用递归调用方法。

代码实现

package mainimport ("fmt""strconv""strings"
)// 解释器接口
type Node interface {Interpret() int //解释方法
}// 数据节点
type ValNode struct {val int
}func (vn *ValNode) Interpret() int {return vn.val
}// =============加法节点=============
type AddNode struct {left, right Node
}func (an *AddNode) Interpret() int {return an.left.Interpret() + an.right.Interpret()
}// =============减法节点=============
type SubNode struct {left, right Node
}func (an *SubNode) Interpret() int {return an.left.Interpret() - an.right.Interpret()
}// =============解释对象=============
type Parser struct {exp   []string //表达式index int      //索引prev  Node     //前序节点
}func (p *Parser) newValNode() Node { //执行数据操作v, _ := strconv.Atoi(p.exp[p.index])p.index++return &ValNode{val: v}
}
func (p *Parser) newAddNode() Node { //执行加法操作( + )p.index++return &AddNode{left:  p.prev,right: p.newValNode(),}
}
func (p *Parser) newSubNode() Node { //执行减法操作( - )p.index++return &SubNode{left:  p.prev,right: p.newValNode(),}
}
func (p *Parser) Result() Node { //返回结果return p.prev
}
func (p *Parser) Parse(exp string) { //对表达式进行解析p.exp = strings.Split(exp, " ") //通过空格分割for {if p.index >= len(p.exp) {return}switch p.exp[p.index] {case "+":p.prev = p.newAddNode()case "-":p.prev = p.newSubNode()default:p.prev = p.newValNode()}}
}
func main() {p := Parser{}p.Parse("1 + 2 + 3 - 4 + 10") //是通过空格进行解释的fmt.Println(p.Result().Interpret())
}
http://www.hkea.cn/news/809413/

相关文章:

  • 网站地图的重要性短信广告投放软件
  • 搭建直播网站需要怎么做教育培训机构平台
  • 濮阳网站网站建设网络营销策划是什么
  • 做新闻网站需要什么手续河北软文搜索引擎推广公司
  • 广州网站建设联系电话seo推广的公司
  • 一起做网店一样的网站关键词歌曲免费听
  • 负责网站建设推广本周热点新闻事件
  • 快速做网站优化谷歌在线浏览入口
  • 苏州企业网站建设开发与制作2023年6月份又封城了
  • 用java做网站可以吗吉林seo刷关键词排名优化
  • 网站建设面试google广告投放技巧
  • 整形网站整站源码如何让关键词排名靠前
  • php网站后台搭建外贸网站大全
  • 建 新闻 网站营销战略有哪些内容
  • 营销融合app网站seo招聘
  • 快速做网站的方法网站换了域名怎么查
  • 建筑工程网络计划图怎么编制百度seo搜索排名
  • 免费建网站系统百度云登陆首页
  • wordpress 采集微博网站建设优化
  • 做淘宝客新增网站推广百度用户服务中心人工电话
  • 域名备案网站建设书模板百度统计登录
  • 禁止WordPress访问官网优化关键词排名提升
  • 爬取漫画数据做网站今日热搜新闻头条
  • 雄安网站建设制作网站关键词如何快速上首页
  • 佛山从事网站建设百度小程序入口官网
  • 自建网站平台可以实现哪些功能网络营销这个专业怎么样
  • 佛山新网站制作公司网页制作成品模板网站
  • 校园网站建设的意见企业管理培训课程网课
  • 郑大远程教育动态网站建设seo优化关键词排名
  • 做logo什么网站昆明百度关键词优化