动态可扩展的通用解析器

时间:2009-09-07 00:49:15

标签: c# java parsing

我编写了一个应用程序,它使用了使用CSharpCC(JavaCC的一个端口)生成的元解析器。我能说的一切都很好,非常好。

对于项目的性质,我希望有更多的灵活性来扩展应用程序使用的元语言的语法。 您是否知道Java或C#的任何现有库(或描述实现过程的文章),我可以用它来编程实现我自己的解析器,而不必强制依赖静态语法?

非常感谢您的支持。

3 个答案:

答案 0 :(得分:1)

Scala的组合解析器会为你做这个伎俩吗?由于Scala编译为Java字节码,因此您可以从Java代码中调用您编写的任何内容。

答案 1 :(得分:0)

看一下JNode命令行界面处理命令行参数解析的方式。每个命令都“注册”它所期望的参数的描述符。命令行语法在XML描述符中单独指定,允许用户定制命令的语法以满足他们的需要。

这是基于Argument类的框架,它基本上是上下文敏感的令牌识别器,以及两级语法/解析器。解析器“准备”一个用户友好的命令语法形式到BNF之类的东西,然后做一个天真的回溯解析,接受它找到的第一个完整的解析。

当前实现的缺点是解析器效率低下,并且根据语法解析大于20个左右的标记输入可能不切实际。 (我们有提高性能的想法,但如果没有重大的重新设计,可能无法实现真正​​的修复......并禁止使用可能含糊不清的命令语法。)

(旁白:这样做的一个动机是支持智能命令参数完成。为此,解析器以“完成”模式运行,在该模式下,它探索所有可能的(部分)解析,并在遇到令牌时注意其状态/用户试图完成的位置。在适当的情况下,然后要求相应的Argument类为当前“单词”提供上下文敏感的完成。)

答案 2 :(得分:0)

Heron语言(一种简单的面向对象语言)中使用的解析器(用C#编写)相对简单和稳定,并且应该易于根据您的需要进行修改。你可以download the source here

相关问题