Tag: dsl

ANTLR java测试文件无法创建树语法对象

我正在使用针对java的ANTLR 3.x创建一个解析器。 我编写了解析器语法(用于创建抽象语法树,AST)和树语法(用于在AST上执行操作)。 最后,为了测试两个语法文件,我用Java编写了一个测试文件。 看看下面的代码, 协议语法 grammar protocol; options { language = Java; output = AST; } tokens{ //imaginary tokens PROT; INITIALP; PROC; TRANSITIONS; } @header { import twoprocess.Configuration; package com.javadude.antlr3.x.tutorial; } @lexer::header { package com.javadude.antlr3.x.tutorial; } /* parser rules, in lowercase letters */ program : declaration+ ; declaration :protocol |initialprocess |process |transitions ; protocol […]

项目特定的DSL是否是责任?

我从一个类似的问题中提出了这个问题,我在评论中提到了我收到的许多很棒的答案之一。 我最初询问AST宏,这主要引起了Lispers非常详细和深思熟虑的回应。 谢谢。 懒惰评估与宏 我在评论中提出的问题是项目特定的DSL是否真的是一个好主意。 当然,这是完全主观的 – 毕竟,当你用一种真正富有表现力的语言写作时,你在哪里画出富有表现力的API和实际的DSL? 例如,我认为大多数Rubyist称之为“DSL”的实际上只是精心设计的API而已。 请注意,我说项目特定的 API。 我认为很多人不会反对使用正则表达式或SQL这样做有意义。 但尽管如此,我认为我们都可以在API和DSL之间划清界限。 当然,它们都是真正的API,但无论如何。 在一个极端你有Lisp,似乎通过宏积极鼓励DSLs。 另一方面,你有像Java一样的DSL,这几乎是不可能的。 DSL的支持者认为它们可以提高灵活性,表现力并增加一致性(例如,使用与语言自身数字相同的运算符的自定义数字对象)。 批评者会说他们可以导致除了DSL编写者之外没有人知道的子语言,从根本上杀死了拥有不同编程语言的观点,并导致无人能理解的代码,因为与API 接口的方式不同。 我得说,我在很多方面同意双方的意见。 由于缺乏表现力,一些Java API只是简单的讨厌。 尽管如此,我通常可以在不阅读文档的情况下总结出正在发生的事情 – 这对于定制的DSL来说是丝毫不可能的。 也许DSL的支持者认为你应该总是阅读API文档。 我不同意,但我也离题了。 但是让我们来看看目前的一些大语言。 C#和Java,即。 他们都没有真正“做”DSL,但他们非常受欢迎。 这是因为他们不允许像DSL这样的东西,允许平庸的编码人员制作出仍然可以理解的代码吗? 事实上DSL是否允许平庸的编码器产生难以穿透的垃圾,这就是为什么Lisp没有尽可能多地使用它的原因,尽管DSL在右手中看起来像什么?

是否有适用于Java的Harel Statechart DSL工具?

我正在寻找一种理解DSL的工具,我可以在其中定义生成Java代码的状态图,或者DSL中的状态图可以按原样运行。 理想情况下,该工具应使用Java编写,并且必须通过Harel Statecharts(或等效的UML 2状态机)的定义来支持上层和正交区域。 或者,用这种DSL编写最好的库或工具是什么?

将自然语言描述解析为结构化数据的策略

我有一套要求,我正在寻找最好的基于Java的策略/ algorthm /软件。 基本上,我想采用自然英语中真人输入的一组配方成分,并将元数据解析为结构化格式(请参阅下面的要求以了解我正在尝试做什么)。 我在这里和其他地方环顾四周,但没有找到任何可以提供关于方向的高级建议。 所以,我会把它交给聪明的人:-): 解决这个问题的最佳/最简单的方法是什么? 我应该使用自然语言解析器,dsl,lucene / solr或其他一些工具/技术吗? NLP似乎可能有效,但它看起来非常复杂。 我宁愿不花费大量时间深入探究,只是为了发现它不能做我正在寻找的东西,或者有一个更简单的解决方案。 要求 鉴于这些食谱成分说明…. “8杯混合蔬菜(约5盎司)” “八只去皮的鸡大腿(大约1¼磅)” “6.5汤匙特级初榨橄榄油” “大约6盎司薄切片熏鲑鱼,切成条状” “2只整只鸡(每只3.5磅)” “每个冷冻切碎的菠菜20盎司,解冻” “.5杯帕玛森芝士,磨碎” “大约.5杯山核桃,烤好的地面” “.5杯Dixie晚餐面包屑混合,平原” “8个蒜瓣,切碎(4茶匙)” “8个葱,切成2块” 我想把它变成这个…. | —– | ——— | ————- | ——————- —— | ——– | ———– | ———————- ———- | ————- | | | 措施| | | 重量| 重量| | | | […]

哪种语言(在JVM上运行)最适合创建DSL?

我们需要创建复杂的固定长度和可变长度的字符串。 这些字符串可能代表客户档案,订单等。您建议使用哪种基于JVM的编程语言? 想法是让最终用户使用此DSL创建字符串。 所以我正在寻找validation,代码完成等。

在ElasticSearch中使用Java API时如何从JSON DSL构造QueryBuilder?

我在Spring Web项目中使用ElasticSearch作为搜索服务,使用Transport Client与ES进行通信。 我想知道是否存在可以从JSON DSL构造QueryBuilder的方法。 例如,将此bool查询DSL JSON转换为QueryBuilder。 { “query” : { “bool” : { “must” : { “match” : {“content” : “quick”}, “should”: { “match”: {“content” : “lazy”} } } } 我需要这种方法,因为我必须从Web前端接收用户的bool字符串输入,并将此bool字符串解析为QueryBuilder。 但是它不适合使用QueryBuilders.boolQuery().must(matchQB).should(shouldQB).must_not(mustNotQB) 。 因为我们可能需要几个必须或非必须查询。 如果存在一个方法可以从JSON DSL构造一个QueryBuilder,或者存在替代解决方案,那将更容易。 PS:我找到了两种方法可以将DSL字符串包装到QueryBuilder进行ES搜索。 一个是WrapperQueryBuilder ,请参阅此处的详细信息。 http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/index/query/WrapperQueryBuilder.html另一个是QueryBuilders.wrapperQuery (String DSL)。

Apache Camel:是否可以在不使用Spring的情况下配置WMQ?

目前我正在使用apache camel和wmq。 对于camel配置和路由,我使用的是Java DSL。 但我找不到任何关于如何使用Java DSL配置WMQ的示例。 这是我尝试配置WMQ时得到的结果: config.xml中 //id //vorname //nachname component.xml文件 但是,正如我之前所说,我不想使用Spring来配置它。 我更喜欢使用Java DSL。 可能吗? 如果是,你能给我一些例子或参考吗? 非常感谢您的帮助。 谢谢。

哪个面向Java的lexer解析器用于简单项目(ANTLR,DIY等)

我正在开发一个小型文本编辑器项目,并希望为几种语言添加基本语法高亮(Java,XML ……仅举几例)。 作为一种学习经历,我想添加一个流行或非流行的Java词法分析器。 你推荐什么项目。 Antlr可能是最知名的,但它似乎相当复杂和沉重。 以下是我所知道的选项。 ANTLR Ragel(是的,它可以生成用于处理输入的Java源代码) 自己动手(我想我可以编写一个简单的令牌解析器并突出显示源代码)。