我目前正在研究用 Java实现此处显示的语言。演示文稿有点长,但它本质上是一个用于创建动态语音的 DSL。例子:
rule ExampleRule
{
criteria Criterion1 Criterion2 Criterion3=value
response ExampleResponse
remember State:=1
trigger Object TriggerName
ApplyFacts "State1:1:0,State2:1:0"
}
response ExampleResponse
{
say "Text" then object ExampleRule
say "Text" then any ExampleRule
say "Text"
scene "Scenepath"
}
我已经查看了不同的解析器生成器,例如 ANTLR、JavaCC 和 JFlex,但我想知道是否只使用 StringTokenizer/Scanner 并滚动我自己的解析器,因为它是用于业余项目的。
我之前决定使用 ANTLR,但在生成的源代码中使用完整路径名时遇到了一些 ANTLR 问题,而且运行时库似乎有点重量级。我找不到太多比较三个解析器库或内置 Java 替代方案的信息。
考虑到语言的性质,每个解析器的优点/缺点是什么?