打开源解析器从C生成数据绑定?

时间:2011-02-13 02:05:39

标签: java xml parsing data-binding gcc

是否存在C头文件(和/或Java jar)的数据绑定解析器/生成器以生成[可能] XML数据绑定以使用/导入(或生成包装器)到“其他”语言? (例如pythonHaskellGo! others)此解析器将用于减少:

  1. 在图书馆中共享程序
  2. 数据分流到磁盘
  3. 进程间消息
  4. 在最简单的情况下:是否glibc维护了“XML数据绑定”? (也许GCC中有一个生成XML数据绑定的 magic 选项?)

    后台示例:在Tandem Guardian上有一个DDL编译器(“数据定义语言”),基本上DDL语言包含许多record definitions,它们可以由DDL编译器“编译”以生成{{ 3}} / Cstruct / struct,TALPascal/RecordFortran/named-commons声明可以然后被“包含”编译C(或TAL / Pascal / Fortran / COBOL)程序时。 DDL语言使得库的创建和语言间共享变得非常容易。 DDL输出可以用于向/从磁盘和COBOL/Record分流数据,因此可以轻松地在用不同语言编写的程序之间共享数据。

    一些近似的当代例子:

    C ++允许直接导入C头文件,例如:

    extern "C" {
        #include "header.h"
    }
    

    Python特别允许解析GTK C库,并通过“Defs”文件生成带有inter-process messages的python包装器模块:

    (define-object name
      (in-module "module")
      (docstring "doc")
      (parent "parent")
      (c-name "name")
      (gtype-id "id")
      (fields
        ("type" "name")
        ...
      )
      (implements "interface")
    )
    

    在某种程度上PyGTK-Codegen解决了不同CPU架构之间的IPC问题。但不是本地数据绑定声明问题到其他语言。

    在第一个实例中,一个开源工具解析只是C生成XML会很棒(而且java中的一个是真正的奖励)。如果它的解析器已经在主要的Linux发行版上更好了。

    我在RPC

    发现了Parser摘要

3 个答案:

答案 0 :(得分:4)

引用:

  

SWIG是一个软件开发工具   连接用C编写的程序   和C++各种各样的高级别   编程语言。使用SWIG   具有不同类型的目标   语言包括常见脚本   PerlPHPPython等语言,   TclRuby。支持列表   语言还包括非脚本   语言如C#,Common Lisp   (CLISPAllegro CLCFFIUFFI),D,   Go languageJavaLuaModula-3OCAML,   OctavePike(?)和R。还有几个解释   和编译的Scheme实现   (GuileMzScheme/RacketChicken)是   支持的。

     

SWIG是最常用的   创建高级解释或   编译的编程环境,   用户界面,以及作为工具   测试和原型化C / C ++   软件。 SWIG通常用于   解析C / C ++接口并生成   以上所需的“胶水代码”   要调用的目标语言   C / C ++代码。 SWIG也可以出口它   以XML和Lisp的形式解析树   s-expressions

支持:

  • 的FreeBSD / OpenBSD的/ NetBSD的
  • HP-UX
  • 的Linux
  • Mac OS X
  • 的Solaris
  • Windows 95/98 / NT / 2000 / XP / Vista

另外:对于Serialisation of C,可以使用包"Cerialization" (s11n/c11n)。这包括 funtxt(文本),funxml(基本XML方言),simplexml(更精简的XML方言),紧凑(非人类),parens(emacs - 友好),wesnoth,{{3 },expat& sqlite

答案 1 :(得分:0)

我的朋友通过python脚本手动解析C文件,并通过cog生成必要的输出。

ragel已经拥有C-parser,但必须亲自添加生成功能。

答案 2 :(得分:0)

我不确定你想要什么但可能Antlr可以用于此目的,而且已经有grammar written for C,所以你可以直接使用这个。