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

福州 福马路 网站建设wordpress文章缩略

福州 福马路 网站建设,wordpress文章缩略,济南网站建设哪里好,做网站开发用哪门语言起因《25行JavaScript语句实现一个简单的编译器》实现的是一个简单到不能再简单的玩具的玩具#xff0c;他的魔法是函数式编程简化了js代码。java 8提供了函数式编程的支持#xff0c;昨晚脑子抽风突然兴趣java也可以实现一个如此简单的编译器#xff01;java和js语言差异ja…起因《25行JavaScript语句实现一个简单的编译器》实现的是一个简单到不能再简单的玩具的玩具他的魔法是函数式编程简化了js代码。java 8提供了函数式编程的支持昨晚脑子抽风突然兴趣java也可以实现一个如此简单的编译器java和js语言差异java相对js这类胶水语言来说还是相对啰嗦的一些动态语言的特性在java里并不具备。《25行JavaScript语句实现一个简单的编译器》的作者是个js高手js用得溜溜的下面说说他用到js里有而java没有的功能。js 字符串模板他在Transpiler中使用ES2015新增的模板字符串功能。 (${ast.expr.map(transpileNode).join( opMap[ast.val] )});js内置 map和简单的赋值语法 const node { val: consume(), type: Op, expr: [] };其他胶水语言的话对应的是tuplejava要实现的话还真啰嗦不少。模式匹配(实际这是js的map啊啊啊) const opAcMap {sum: args args.reduce((a, b) a b, 0),sub: args args.reduce((a, b) a - b),div: args args.reduce((a, b) a / b),mul: args args.reduce((a, b) a * b, 1)};java还木有模式匹配。没有这几个js功能但我们还是可以通过各种方法绕一下的。怎么绕请看下文java实现废话不啰嗦上代码代码风格学他的也紧促点凑合着看吧static final int OP 0, NUM 1;private static List lexer(String input){return Stream.of(input.split( )).map(String::trim).filter(s - s.length() 0).collect(Collectors.toList());}private static class Parser {Iterator lex;String nextnull;public Parser(List lex) { this.lexlex.iterator(); }private Node parseOp(String str) {Node n new Node(str, OP);while (lex.hasNext())n.addLast(parse());return n;}public Node parse() { return (nextlex.next()).matches(\\d) ? new Node(Integer.parseInt(next), NUM) : parseOp(next); }}final static Map opMap new HashMap(4) {{ put(sum, ); put(sub, -); put(div, /); put(mul, *);}};private static String codeGenerator (Node ast) { return ast.type NUM ? String.valueOf(ast.val) : genOp(ast); }private static String genOp(Node node) { return ( node.stream().map(n - codeGenerator(n)) .collect(Collectors.joining( opMap.get(node.val) )) ); }private static class Node extends ArrayDeque{Object val;int type;public Node(Object val, int type) {super();this.val val;this.type type;}}private static int eval(Node ast) { return (int) (ast.type NUM ? ast.val : ast.stream().reduce(evalOps.get(ast.val)).get().val); }final static Map evalOpsnew HashMap(4) {{put(sum, (a, b) - new Node(eval(a) eval(b), NUM)); put(sub, (a, b) - new Node(eval(a) - eval(b), NUM));put(div, (a, b) - new Node(eval(a) / eval(b), NUM)); put(mul, (a, b) - new Node(eval(a) * eval(b), NUM));}};js实现lex和transpile用了23行代码。没有tuple java实现node多花了9行代码加起来用了25行。不过他加eval功能的代码行(33行)比我这(29行)可是多的。代码行数多少是其次函数式编程写代码还真精简不少写的爽看得也不累。写在后最后还是想说这个玩具的玩具。之所以说这个是玩具呢。首先他定的语法规则是非常简单的。其次表面是一个乘除加减语言但是没有算术优先级。最后这跟什么编译器没啥多大的关联(词法分析器用空格直接分割也只能是玩泥沙)如果想写个简单解析器之类的可以参考我的《练手写了个SQLite解析器》和《一个android sqlite CRUD代码生成小工具》本文源码下载移步github《tiny-compiler-java》
http://www.zqtcl.cn/news/462251/

相关文章:

  • 有哪些可以做1元夺宝的网站推广网站哪家做的好
  • 网站备案 域名不是自己的成都电子商务网站
  • 网站内容管理系统建设2021年建站赚钱
  • 网站建设交流发言稿找做网站的上什么app
  • 企业如何应用网站的wordpress lensnews
  • 可信的邢台做网站学电商运营需要多少钱
  • 网站中文名称做微商进哪个网站安全
  • 网站前端建设需要学会什么意思wordpress 快递查询 插件
  • 网站建设腾讯云与阿里云做网站上市的公司
  • 视频直播网站app开发网站备案主体是
  • 做的好的微信商城网站建设商务网站
  • 小白用网站建设工具专做奢侈品品牌的网站
  • 安装vs2015网站开发外包公司为什么没人去
  • 网站关键字多少合适唐河微网站开发
  • 临沂网站建站专业公司网站开发 文学
  • 乐清网站建设服务定制企业网站建设
  • 简单公司网站模版百度站长工具抓取诊断
  • 网站建设与管理维护 大学论文铁路建设单位网站
  • 贵州企业展示型网站建设wordpress文章点不开
  • 毕业设计可以做网站吗网页版征信报告查询
  • 企业网站每年的费用钢筋网片每平米重量
  • 做网站是属火的职业吗苏州网站建设信息网络
  • 怎么自己建一个论坛网站如何做中国古城的网站
  • 做网站表格网站建设综合实训案例
  • vs2012 网站开发wordpress好看的页面跳转
  • 阿里去要企业网站建设方案书小程序开发 杭州
  • 微信公众号文档网站开发与优化课程总结
  • 网站建设网课海东营销网站建设公司
  • 仿站工具教程视频宣传片免费模板
  • 美食网站建设项目分析报告莱芜都市网人才招聘