一,Interpreter使用面不是很广,描述了一个语言解释器是怎么构成的,在实际应用中,我们可能很少去构造一个语言的解释器.
没在平常使用中发现例子,故以java与模式一书中的例子为例。。。
这个例子是针对 与,或,非提供的一套解析器
提供一个实现的环境
import java.util.HashMap;
import java.util.Map;
/**
*提供一个boolean环境,用于作判断
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:39:24 PM
*/
public class Context {
private Map map=new HashMap();
public void assign(Variable var,boolean value){
map.put(var, new Boolean(value));
}
public boolean lookup(Variable var)throws IllegalAccessException{
Boolean value=(Boolean)map.get(var);
if(value==null){
throw new IllegalAccessException();
}
return value.booleanValue();
}
}
解析器的接口
/**
*进行and or !操作的抽象
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:36:54 PM
*/
public interface Expression {
//用于判断操作
public boolean interpret(Context ctx);
public boolean equals(Object o);
public int hashCode();
public String toString();
}
//And的操作
/**
* i与操作
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:47:12 PM
*/
public class And implements Expression {
private Expression left,right;
public And(Expression left,Expression right){
this.left=left;
this.right=right;
}
public boolean interpret(Context ctx) {
// TODO Auto-generated method stub
return left.interpret(ctx)&&right.interpret(ctx);
}
public boolean equals(Object o){
if(o!=null&&o instanceof And){
return this.left.equals(((And)o).left)&&this.right.equals(((And)o).right);
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return "("+left.toString()+"AND"+right.toString()+")";
}
}
//or操作
/**
* 或操作
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:53:04 PM
*/
public class Or implements Expression {
private Expression left, right;
public Or(Expression left, Expression right) {
this.left = left;
this.right = right;
}
public boolean interpret(Context ctx) {
// TODO Auto-generated method stub
return left.interpret(ctx) || right.interpret(ctx);
}
public boolean equals(Object o) {
if (o != null && o instanceof Or) {
return this.left.equals(((Or) o).left)
|| this.right.equals(((Or) o).right);
}
return false;
}
public int hashCode() {
return (this.toString()).hashCode();
}
public String toString() {
return "(" + left.toString() + "OR" + right.toString() + ")";
}
}
//Not操作
/**
* 非操作
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:40:35 PM
*/
public class Constant implements Expression{
private boolean value;
public Constant(boolean value){
this.value=value;
}
public boolean interpret(Context ctx) {
return value;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.value==((Constant)o).value;
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return new Boolean(value).toString();
}
}
//-----------------------为其提供操作的类型Variable Constant
Variable
/**
* 使用相应的名称到context中进行查找
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:44:36 PM
*/
public class Variable implements Expression {
private String name;
public Variable(String name){
this.name=name;
}
public boolean interpret(Context ctx) {
try {
return ctx.lookup(this);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.name.equals(((Variable)o).name);
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return name;
}
}
//Constant
/**
* 返回固定类型
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:40:35 PM
*/
public class Constant implements Expression{
private boolean value;
public Constant(boolean value){
this.value=value;
}
public boolean interpret(Context ctx) {
return value;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.value==((Constant)o).value;
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return new Boolean(value).toString();
}
}
//------------------------------------test
可在此对and or not进行任意的操作
/**
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 10:01:31 PM
*/
public class Client {
private static Context ctx;
private static Expression exp;
public static void main(String[] args) {
ctx=new Context();
Variable x=new Variable("x");
Variable y=new Variable("y");
Constant c=new Constant(true);
ctx.assign(x, false);
ctx.assign(y, true);
exp=new Or(new And(c,x),new And(y,new Not(x)));
System.out.println(exp.interpret(ctx));
}
}
/**
--false
*/
分享到:
相关推荐
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
一、源码特点 JSP 宿舍管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 二、功能介绍 如博客中介绍, 三、注意事项 1、管理员账号:admin 密码:admin 数据库配置文件DBO.java ,权限包括管理员,学生 2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 3、数据库文件名是jspsushe 系统名称sushe 4、地址:http://127.0.0.1:8080/sushe/login.jsp 不包含人工服务,如果需要调试,联系作者购买
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Scratch少儿编程教学平台是一款专为儿童和青少年设计的编程学习工具,它集成了Scratch、ScratchJr、Python等多种编程教学工具,提供了全面且丰富的编程学习资源。平台内包含了各种编程课程,涵盖了从基础到进阶的各个层次,适合不同编程基础的学生学习。同时,平台还提供了班级和作业管理功能,方便教师进行教学管理和学生学习进度的跟踪。权限设置功能保证了平台的安全性和隐私性,而社区功能则为学生提供了一个展示自己作品和交流学习经验的平台。 这个编程教学平台适用于6-18岁的儿童和青少年,特别是对编程有兴趣的学生。无论是在学校的计算机课程中,还是在家庭中自我学习,都可以使用这个平台。教师可以利用这个平台进行教学,家长也可以通过这个平台引导孩子学习编程。 使用这个Scratch少儿编程教学平台,学生可以在轻松有趣的环境中学习编程,提升逻辑思维和创新能力。教师和家长可以通过平台监控学生的学习进度,及时给予指导和帮助。总的来说,这个平台为少儿编程教育提供了一个全面、便捷、有趣的解决方案。
5 采购计划物料跟催表-EPES19-SC-CG-023-2023.xls
Java毕业设计-基于SSM框架的经典诗文学习爱好者学习交流平台(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:433】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 这次开发的经典诗文学习爱好者学习交流平台管理员功能有个人中心,用户管理,诗词分类管理,诗词赏析管理,系统管理等。用户可以注册登录,查看诗词赏析,公告信息,评价和收藏操作。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
基于pytorch深度学习框架的图像分类(集成了pytorch原生api, apex, DALI等...).zip
Python运维之多线程!!
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Java毕业设计-基于SSM框架的可视化高校公寓管理系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:464】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理班级管理、每日打卡管理、字典管理、访客管理、宿舍缴费记录管理、离校登记管理、宿舍管理、宿舍管理员管理、物品进出登记管理、学生管理、住宿信息管理、管理员管理等功能。
一个基于Django开发的深度学习Web平台.zip
基于SSM+Vue的学生宿舍门禁信息管理系统毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:479】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 该学生宿舍门禁信息管理系统具有完善的功能,界面一目了然,用户一看就会操作,管理员功能模块和用户功能模块是该系统的两大主要功能模块,其功能需求具体如下: 管理员的功能需求: 管理员在后台可以全面管理系统,管理员的功能主要包括用户管理、新闻管理、书籍管理和评论管理等。 用户的功能需求: 用户在没有注册之前,进入网站,用户的主要功能包括查看网站首页、公告信息、书籍分类和书籍信息,用户在注册登录后进入网站,用户的主要功能包括书籍评论、加入书架、书籍下载、个人信息管理、我的书架和我的留言。该学生宿舍门禁信息管理系统具有完善的功能,界面一目了然,用户一看就会操作,管理员功能模块和用户功能模块是该系统的两大主要功能模块,其功能需求具体如下: 管理员的功能需求: 管理员在后台可以全面管理系统,管理员的功能主要包括用户管理、新闻管理、书籍管理和评论管理等。 用户的功能需求: 用户在没有注册之前,进入网站,用户的主要功能包括查看网站首页、公告信息、书籍分类和书籍信息,用户在注册登录后进入网站,用户的主要功能包括书籍评论、加入书架、书籍下载、个人信息管理、我的书架和我的留言。
HTML5+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。
ArduinoESP32板卡支持包
附件是Linux环境下搭建Zookeeper的分布式环境教程,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!