首页 文章 精选 留言 我的

精选列表

搜索[SVG格式],共10000篇文章
优秀的个人博客,低调大师

Flutter 开始支持构建 Linux 桌面应用,Snap 格式却惹质疑

谷歌和 Ubuntu 母公司 Canonical 联合将 Flutter 带入了 Linux 桌面平台,并发布了首个 alpha 版本。现在,开发者可以通过 Snap Store(Linux 应用程序商店)来分发自己的应用。 Flutter 由谷歌打造,起初用于创建跨平台移动应用。去年五月,谷歌宣布将对 Flutter 的支持从移动平台扩展到桌面级别,并公布了针对 macOS、Windows 和 Linux 的计划。Canonical 正是在这时看到了机会,表示希望“将 Flutter 的最佳体验带给更多 Linux 发行版”,于是双方就此展开了合作。 图片来源:fossbytes 通过 Snap 获取Flutter SDK,开发者就可以在 Linux 上构建并部署自己的应用程序。然而,Snap 这一部署方式遭到了些许质疑。来自 OSnews 的记者Thom Holwerda 就认为 “Snap 在 Linux 世界中颇有争议”,并拿Linux Mint不再支持 Snap 一事来佐证,他指出 “Snap 服务端是闭源的”,最后表示“谷歌选择 Snap 意味着他们根本不了解 Linux 生态系统,只是为了使自己的产品被 Linux 社区接受罢了”。 而从另一个角度来看,鉴于 Snap 在多个 Linux 发行版中的通用性,将 Flutter 应用程序以 Snap 包的方式发行也能减少开发者在不同发行版之间打包和版本管理的时间。 关于 Linux 版 Flutter 的更多详细信息可参阅官方文档:https://flutter.dev/desktop

优秀的个人博客,低调大师

Antlr4: 修改语法规则更接近普通BNF格式

经 @沈默 在上文Antlr4添加中文变量赋求值,括号,各种问题评论中指出, 语法规则描述依赖于Antlr4生成的语法分析器的默认分析方法, 比如运算符的左联系, 以及优先级处理等等. 于是将语法修改为下面(源码版本号: program-in-chinese/quan5): 表达式: 求积表达式 (('+'|'-') 求积表达式)*; 求积表达式: 最小表达式 (('*'|'/'|'×'|'÷') 最小表达式)*; 最小表达式 : 字面量 | '(' 表达式 ')' ; 字面量 : T数 | T变量名 ; 这样做的结果是, Antlr4会分析生成一个多叉树. 比如 1+2-3, 生成树如下: 于是在生成抽象语法树时手动转换为二叉树. 代码如下: private 节点 构建二叉树(List<ParseTree> 子节点) { if (子节点.isEmpty()) { return null; } else if (子节点.size() == 1) { return visit(子节点.get(0)); } else { ParseTree 最后运算符节点 = 子节点.get(子节点.size() - 2); 运算符号 运算符 = ((TerminalNodeImpl)最后运算符节点).symbol.getType() == 圈5Parser.T加 ? 运算符号.加 : 运算符号.減; 运算式节点 节点 = new 运算式节点(); 节点.运算符 = 运算符; 节点.左子节点 = 构建二叉树(子节点.subList(0, 子节点.size() - 2)); 节点.右子节点 = visit(子节点.get(子节点.size() - 1)); return 节点; } } 开发过程中发现一些坑(如果是小白错误请指出). 一个比较费解的是, 不能省去"字面量"规则如下: 最小表达式 : T数 | T变量名 | '(' 表达式 ')' ; 不然生成的分析器会有编译错误: com/中文编程/圈5/分析器/圈5Parser.java:403: error: unreachable statement enterOuterAlt(_localctx, 3); Antlr4有个github库汇集了社区维护的各种语言的语法规则文件, 其中有Java8, 根据注释说明它的语法规则描述"极度"接近Java标准, 于是参考了它的实现. 其中看到这样的模式(已转成中文): 求和表达式 : 求积表达式 | 求和表达式 '+' 求积表达式 | 求和表达式 '-' 求积表达式 ; 求积表达式 : 最小表达式 | 求积表达式 '*' 最小表达式 | 求积表达式 '/' 最小表达式 ; 感觉这样会让语法树转换这一步的实现更加方便(应该可以省去多叉树转换成二叉树的那个递归算法). 在添加新功能之前, 打算尝试修改成这样. 已完成: 表达式 : 求积表达式 | 表达式 '+' 求积表达式 | 表达式 '-' 求积表达式; 求积表达式 : 最小表达式 | 求积表达式 '*' 最小表达式 | 求积表达式 '/' 最小表达式 | 求积表达式 '×' 最小表达式 | 求积表达式 '÷' 最小表达式; 的确省去了多叉树转换. 代码整理完毕(program-in-chinese/quan5). 接下去, 是条件判断还是函数定义? 补记 Antlr4自带的语法分析可视化工具, 以antlr/grammars-v4为例: $ alias grun='java -cp "{PATH_TO_antlr-4.7-complete.jar}:$CLASSPATH" org.antlr.v4.runtime.misc.TestRig' $ java -cp "{PATH_TO_antlr-4.7-complete.jar}:$CLASSPATH" org.antlr.v4.Tool -visitor -no-listener Java8.g4 $ javac -cp "{PATH_TO_antlr-4.7-complete.jar}:$CLASSPATH" Java8*.java $ grun Java8 expression -tree <--- 将输入字符串进行语法解析, 生成树结构 Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically a>1 (expression (assignmentExpression (conditionalExpression (conditionalOrExpression (conditionalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName a)))))))) > (shiftExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (primary (primaryNoNewArray_lfno_primary (literal 1))))))))))))))))))) $ grun Java8 expression -gui <--- 图形化 Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically 2>1 ^D 2018-01-15

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册