代码之家  ›  专栏  ›  技术社区  ›  Irwin

如何在Pascal(FPC/Lazarus)中执行外部或动态代码

  •  0
  • Irwin  · 技术社区  · 7 年前

    首先,我来自Visual FoxPro 9.0。

    我在VFP上开发的所有应用程序都可以执行来自任何事件(按钮、网格、表单等)的动态代码。

    例子:

    lcFile = "c:\test\myDynamicCode.txt"
    =EXECSCRIPT(FILETOSTR(lcFile))
    

    可以在Pascal上执行吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  4
  •   MartynA    7 年前

    Lazarus的默认安装附带一组通用标题为“Pascal脚本”的组件,可用于实现脚本引擎和调试器-请参阅

    http://wiki.freepascal.org/Category:Pascal_Script

    http://wiki.freepascal.org/Pascal_Script_Examples

    脚本引擎可以编译(到字节码)并执行用对象Pascal方言编写的脚本,该方言与Delphi实现的对象Pascal相近,但不完全相同。该软件包在所提供的许多Lazarus/FPC单元周围带有代码包装器,这些单元实现了与Delphi的许多组件等效的组件。

    简而言之,您应该发现,您可以使用Pascal脚本编写和动态执行对象Pascal代码,这相当于您可以在FPC中编写和编译的大部分代码。正如您将从第二个链接中的代码示例中收集到的一样,Pascal脚本引擎允许您添加在自己的Lazarus/FPC代码中定义的自定义函数,并使您的表单和类可以访问Pascal脚本并可由其编写脚本。

    如果您需要一个脚本引擎来实现另一种语言,那么可以使用第三方库来帮助您实现这一点。大多数是为Delphi编写的,但应该很容易翻译成FPC+Lazarus。示例包括

    TP Lex/Yacc: http://www.musikwissenschaft.uni-mainz.de/~ag/tply/

    Delphi编译器生成器: http://www.soft-gems.net/index.php/tools/delphi-compiler-generator

    因此,简而言之,如果您想做的事情可以用Lazarus/FPC代码表示,那么很有可能用Pascal脚本代码执行。如果您需要另一种脚本语言的引擎,TP-Lex/Yacc和DCG将允许您编写自己的脚本语言,但请注意它将是 大量 比使用Pascal脚本组件需要更多的工作。

    顺便说一句,我不知道你是否对Linux感兴趣,但Linux版本的Lazarus/FPC也附带了Pascal脚本组件。