使用Antlr实现简单的DSL】的更多相关文章

为什么要使用DSL DSL是领域专用语言,常见的DSL有SQL,CSS,Shell等等,这些DSL语言有别于其他通用语言如:C++,Java,C#,DSL常在特殊的场景或领域中使用.如下图: 领域专用语言通常是被领域专家使用,领域专家一般不熟悉通用编程语言,但是他们一般对业务非常了解,程序员一般对通用语言比较熟悉,但是在做行业软件的时候对业务部了解.这就需要协作的过程,一种方式是领域专家通过文档或者教授的方式把业务逻辑传递给程序员让程序员翻译成业务逻辑,而另一种方法,程序员为领域专家定制DSL,…
原文地址:http://www.moye.me/2015/05/30/dsl-in-action/ 最近看了本有意思的书,受到了一些启发,在此记录一下: DSLs in action   DSL是什么 即 domain-specific language ,是指和业务域模型相关的语言,粗糙的说法:行(业黑)话.关于什么是DSL,见仁见智,比如我认为SQL是一种DSL,有人却认为不是. 用途 对于“然并卵”一族来说,世界上大多数事情对他们来说都没什么用,DSL也不例外:于我而言,用DSL的一套理论…
本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更易读且易调试 查询与过滤 Elasticsearch(以下简称ES)中的数据检索分为两种情况:查询和过滤. Query查询会对检索结果进行评分,注重的点是匹配程度,例如检索"运维咖啡吧"与文档的标题有多匹配,计算的是查询与文档的相关程度,计算完成之后会算出一个评分,记录在_score字段中…
车联网服务non-RESTful架构改造实践   导读 在构建面向企业项目.多端的内容聚合类在线服务API设计的过程中,由于其定制特点,采用常规的restful开发模式,通常会导致大量雷同API重复开发的窘境,本文介绍一种GraphQL查询语言+网关编排联合的实践,解决大量重复定制的问题. 早期与车厂合作过程中,基于高德已有的数据.引擎能力和一些较为重要的相关CP服务(如停车场.加油站.天气等),形成的在线服务协作模式是针对客户需求,采用REST API提供针对每个车厂.每个项目以及每个终端提供…
背景 ​ SQL作为一门标准的.通用的.简单的DSL,在大数据分析中有着越来越重要的地位;Spark在批处理引擎领域当前也是处于绝对的地位,而Spark2.0中的SparkSQL也支持ANSI-SQL 2003标准.因此SparkSQL在大数据分析中的地位不言而喻. 本文将通过分析一条SQL在Spark中的解析执行过程来梳理SparkSQL执行的一个流程. 案例分析 代码 val spark = SparkSession.builder().appName("TestSql").mas…
cats是scala的一个新的函数式编程工具库,其设计原理基本继承了scalaz:大家都是haskell typeclass的scala版实现.当然,cats在scalaz的基础上从实现细节.库组织结构和调用方式上进行了一些优化,所以对用户来说:cats的基础数据类型.数据结构在功能上与scalaz是大致相同的,可能有一些语法上的变化.与scalaz著名抽象.复杂的语法表现形式相比,cats的语法可能更形象.简单直白.在scalaz的学习过程中,我们了解到所谓函数式编程就是monadic Pro…
我的确认为计算机学院应该开一门 Scala 的语言课程. 在这篇文章中,我会讲述为什么我会有这样的想法,在此之前,有几点我想要先声明一下: 本文无意对编程语言进行评比,我要讲述的主体是为什么你应该学习 Scala.51CTO之前曾发布过一篇 Java 程序员为何要学习Scala的文章,可能也会对你有所帮助. 目前 Scala 有两个实现方式,一种是在 JVM(Java 虚拟机)上运行,另一种是在 CLR(Common Language Runtime 的缩写,即公共语言运行库)上运行.不过,JV…
英文版出处:http://www.padrinorb.com/guides/generators Padrino提供了用于快速创建应用的生成器,其优势在于构建推荐的Padrino应用结构.自动生成罗列了所有启动依赖项的Gemfile并提供帮助菜鸟尽快上手的指南. 生成器一个重要的特点就是它们被从头建立来支持你的Padrino应用中涉及到的大量工具.类库和Gems. 也就是说,Padrino生成器并不限制你使用任何数据库.对象关系映射.测试框架.模板引擎或JavaScript库.事实上,在生成应用…
Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应.它提供了一个super-duper-happy-path的交互方式,无需定义各种复杂的路由规则,Nancy会根据你的请求路径自动匹配.Nancy和ASP.NET MVC不同,它更多的是借鉴了Ruby的一些特性. Nancy 的特点: 1. 建立了…
写这篇文章主要有两方面用途 1.希望给rails同行一定的帮助,翻译水平有限,贴出中英文,翻译有误的地方欢迎指正,非常感谢,转载请标明出处,谢谢. 2.加深作者对gem的理解,有需要更详细了解安装以及使用的朋友可以点击文章中的链接进入gem sources详细介绍. 3.不定期更新 一.mjackson/rack-accept 版本:0.4.5 Rack::Accept is a suite of tools for Ruby/Rack applications that eases the c…