我正在使用java编写音频播放器,我想要一个类似于foobar2000的标题格式化程序。例如:
$if($strcmp(%album artist%,%artist%),%artist%,$if2(%album%,Unknown))
或
[%album%][ '('CD $ifgreater(%totaldiscs%,1,%discnumber%,)')']
第一个示例返回一个字符串,如果它对于播放列表中的连续曲目是相同的,则将它们分组,第二个示例格式化相册名称并添加cd编号(如果存在)。完整参考是here
我不需要所有功能,但至少需要一些功能。
为这样的语言编写解析器有多难。是否有适用于java的编译器编译器?
使用java的javascript引擎会更容易吗?它的速度有多快(处理数千首曲目)?
答案 0 :(得分:2)
您是否考虑使用Freemarker或Velocity等模板引擎?他们的标记语言并不完全符合您的要求,但它们非常灵活。但是,如果它适用于最终用户,可能会过于冗长。
答案 1 :(得分:1)
有一些解决自定义语言的工具。其中一个常用工具是解析器生成器antlr。
要回答你的问题,是否有困难?是的。将语句解析为语法树只是第一步。你仍然需要编写解释器,这个foobar2000标题生成器语法看起来很复杂!