问题标签 [stringtemplate-4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
stringtemplate - StringTemplate 有没有办法将空字符串转换为null?
我有一种情况,我需要在具有格式的对象属性列表上使用包装和锚定功能。
我可以在字符串模板中创建一个列表,然后去掉空值,如果它们只是直接的属性访问。但是我希望能够有条件地格式化一些属性。例如,给定模板。
和一个带有值的对象
会产生
如果我传递了相同的对象,但 Value 的值为空,它将产生
因为 strip 删除了空值。但是,如果我通过 Vat 的空值的第一个对象,那么我得到
因为模板总是解析为空字符串。那么有什么办法可以将空字符串转换为 null 吗?
此处明显的解决方法 StringTemplate 3: how to filter a list? 不起作用,因为它会在模板上引发编译异常。具体来说,它不喜欢“无”作为地图的价值。如果我可以像在那篇文章中那样将一个值显式映射为 null,那么我将拥有我需要的东西。
java - ANTLR 4 和 StringTemplate 4 - 使用带有模板的 tree walker
免责声明:上个月之前我从未使用过 Java,在此之前我也从未听说过 ANTLR 或 StringTemplate。在今年夏天的实习中,我得到了一个使用公司其他人从未使用过的工具的项目。每个人都“相信我”,我会“弄清楚”。因此,我的理解存在巨大差距。我喜欢这个项目,我学到了很多,所以不要把这当成抱怨。我只是想让它工作。
现在,我正在为旧的特定领域语言开发一个漂亮的打印机概念证明。我的 ANTLR 语法生成了很好的解析树,并且我能够输出简单的 StringTemplate 示例,就像介绍中的示例一样。
假设我的.stg
文件中有一个简单的模板:
在 Java 中,我可以用来add()
设置每个模板参数的值:
如何让 ANTLR 和 ST 读取文本文件并生成漂亮的打印输出?
应该成为
例如。(这不是我打算格式化所有输出的方式,别担心。它会打印得比这更漂亮。)
在这个答案中,我了解到 ANTLR 4 会自动生成步行者。假设我的 ANTLR 语法正确/写得很好,我如何将 ANTLR 规则/标记与我的模板参数匹配以从输入文本文件生成输出?
如果我在某处的文档中错过了它,请告诉我。ANTLR 4 和 ST 4 的示例比以前的版本少得多。
java - 从 ANTLR 基本侦听器访问字符串模板规则名称
在漂亮的打印机上工作。根据我目前对 ANTLR 和 StringTemplate 的理解,如果我想将我的所有语法规则与模板匹配并在每次调用语法规则时应用模板,我可以创建名称与我的语法规则匹配的模板。
[附带问题:我应该这样处理它吗?似乎 ANTLR 应该将解析后的文本与输出模板进行匹配。我的工作是确保解析器规则和模板是完整/正确的。]
我认为 ANTLR 3 允许在 ANTLR 语法中直接设置模板,但 ANTLR 4 似乎已经远离了这一点。
基于上述假设,看起来 ANTLR 生成的 MyGrammarBaseListener 类将完成所有工作。
通过将此示例转换为 ANTLR 4,我已经能够收集在解析文本输入时调用的规则的名称。我最终得到了这个enterEveryRule()
:
链接的示例应用更改来创建文本输出,exitEveryRule()
因此我不确定在哪里实际实现我的模板匹配算法。我会尝试两者enter
,exit
看看什么效果最好。
我的主要问题是:如何访问 MyTemplates.stg 中的模板名称?我必须导入什么等?
(我可能会回来询问在另一个问题中将规则子项与模板参数匹配...)
stringtemplate - 我需要比较 StringTemplate 中的属性值
我有一个元组列表,我需要从以下位置发出类似 C 的布尔表达式:
我的模板:
这输出:
我想检查在这种情况下是否与输出$it.0$
相同(在我的示例中,这将为最后一个元组生成)。这可能吗?$it.1$
c==='$it.0$'
c==='_'
stringtemplate - 如何迭代字符串模板 4 映射的键和值?
在 StringTemplate 4 中,迭代的默认行为是迭代keys
而不是values
,这是版本 3 中的行为。
我找不到如何在版本 4 中同时迭代keys
和的语法。 values
有人可以发布语法示例吗?
java - StringTemplate getInstanceOf 返回 null
再会!
我开始使用 StringTemplate,但遇到了一个非常烦人的问题。我有一个简单的模板“T.st”
它保存在一个目录“模板”中,该目录是我的源文件夹“src/main/resources”的一部分。当我执行以下几行
组变量的根字段的值为“jar:file:/D:/path/to/apache-tomcat-8.0.21/wtpwebapps/application/WEB-INF/lib/service.jar!/templates/”
但是 st 将为空,即使显然找到了 groupdir,因为它存在于给定的 service.jar 中,并且当我将 dir 名称更改为不存在的名称时,我得到一个目录不存在的异常。但我不确定为什么我无法获得我的 T 模板的实例。
假设我将模板保存在“C:/templates”中并使用它来获取 STGroup,我最终将获得一个有效的实例并可以呈现正确的字符串。如果我的模板存储在普通目录(工作)或我的 service.jar 中的目录(不工作),为什么会有区别?
问候
java - stringtemplate4 获取“匿名()”作为输出
试图弄清楚我在这里做错了什么。
然后稍后调用:
给出“anonymous()”的输出而不是插入。我在这里做错了什么?
java - 渲染传递给模板的模型对象的属性时出现问题
我是一个非常基础的 StringTemplate 新手。我正在尝试利用它来发送自动电子邮件。我已经尽可能多地阅读以消化那里的内容。我从一个简单的测试用例开始,在获取要渲染的对象的属性时遇到了麻烦。作为测试用例,我的模板文件 email.stg 中有以下内容。
我正在尝试传递我的 Person 对象并让模板呈现 personFirstName 属性。这将调用一个公开的 getter Person.personFirstName()。
我的 Java 代码如下所示:
我的输出反映了 personFirstName 属性可通过 java 使用,但我的模板没有呈现它。
如果我将激活模板限制为:
我得到以下结果,其中人员对象呈现为 _thePerson.toString()。
任何帮助将不胜感激,因此我可以继续使用我正在尝试使用的更复杂的模板。
java - 使用字符串模板将首字母转换为大写字母
我正在使用字符串模板文件来生成 java 文件。为此,我正在使用 ANTLR。字符串模板文件之一的代码如下所示:
但它不会产生效果。 format="capital"
如何合并这些更改?我是否需要包含任何包或文件?我是字符串模板和 ANTLR 的新手。
java - 在 ANTLR 版本 4 中构建 AST
我正在开发一个编译器,并且已经使用 ANTLR4 实现了词法分析器、解析器和语义分析器(使用侦听器和访问者)。对于代码生成,我计划使用 StringTemplate(ST) 生成 LLVM IR。为此,我正在考虑首先构建一个 AST,然后生成代码。
我的问题是我需要构建 AST 吗?或者我可以使用解析树吗?如果我需要使用 AST,我找不到任何使用访问者或侦听器手动构建 AST 的示例。即使是一个小的语法示例也会很有帮助。
谢谢你。