【问题标题】:Are there any examples or documentation on using the Castalia source parser?有没有关于使用 Castalia 源解析器的示例或文档?
【发布时间】:2010-12-22 18:33:15
【问题描述】:

虽然我之前写过很多递归解析器,但最近我对 Castalia Delphi 解析器产生了兴趣(为什么要重新发明轮子)。我知道这个解析器多年来已经在许多项目中使用过 - 但要找到它的任何文档似乎很困难。

我在哪里可以找到文档?或者作为替代方案,是否有任何明确的示例可以在实际解析场景中使用它?

这个想法是使用 Castalia 进行 Delphi 单元的语法验证,并且(如果可能)受益于生成程序的节点树(带有类、它们的方法、参数、结果数据类型、if/then/else --基本上是一个单元或程序的完整地图)。您可以将其视为“半个脚本运行时”,而无需实际运行任何代码,只需将其分解为最基本的方面。

【问题讨论】:

  • 请分享你的发现,你最终选择/做了什么?

标签: delphi parsing


【解决方案1】:

为什么不使用 JvInterpreterParser?它只有 2-3 个单元依赖项...可以轻松修改以满足您的需求,您还可以提高速度,在旧测试中,我在 6 秒内解析了一个 80 MB 的文件。在奔腾 4 上运行 @ 2.8 Ghz 左右...

【讨论】:

  • 那么问题就变成了:有没有使用JvInterpreterParser的文档/例子?
  • @Craig Peterson 是的,有一个很好的例子,JvInterpreter 类,你基本上从头开始并调用 GetNextToken 之类的东西,直到令牌是 tkEOF 并且你知道你已经到了结尾该文件,现在 JvInterpreter 的源代码非常大,但是对于基本用法,您可以轻松理解如何使用它——如果您想要更多,那么您应该开始深入思考和理解它是如何工作的并提高性能(如果是这样的话)
  • 我不确定 Castalia Delphi 解析器到底做了什么,但 TJvInterpreterParser 实际上不是解析器;它是一个词法分析器或标记器。 TJVInterpreterExpression 及其衍生的各种类都是解析器。
  • @Mason Wheeler Jon L.A. 需要将包含代码的文件或字符串拆分为标记的东西......只要解析器、词法分析器、标记器、驴或鸭子能让他完成一个步骤项目名称不是那么重要...
  • 更新了描述以更好地描述我感兴趣的目的。它用于对象帕斯卡分析器。而这只是我正在设计的完整程序的一部分。一个单元的每一英寸都必须被解析并分解成多个部分。几乎就像字节码编译器一样——除了我没有任何实际的编译。
【解决方案2】:

这里描述了使用解析器: http://delphiblog.twodesk.com/using-the-castalia-delphi-parser

该帖子还引用了一些使用解析器的项目。

这是另一个: https://github.com/LaKraven/MonkeyMixer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2012-08-02
    • 2020-05-21
    • 1970-01-01
    • 2014-01-14
    • 2012-04-22
    相关资源
    最近更新 更多