Открывает Source Parser для генерации привязок данных из C? - PullRequest
0 голосов
/ 13 февраля 2011

Существует ли привязка данных Анализатор / генератор заголовочных файлов C (и / или jar-файлов Java) для генерации [возможно] привязки данных XML для использования / импорта (или создания оболочек) на «другие» языки ? (например, python , Haskell , Go! и others ) Этот синтаксический анализатор будет использоваться для сокращения:

  1. процедуры обмена в библиотеках
  2. шунтирование данных на / с диска
  3. межпроцессные сообщения

В простейшем случае: существует ли уже поддерживаемая «привязка данных XML» для glibc ? (Может быть, в GCC есть опция magic , которая генерирует привязки данных XML?)

Фоновый пример: на Tandem Guardian имеется компилятор DDL («Язык определения данных»), в основном язык DDL содержит множество определений записей , которые можно «скомпилировать» с помощью DDL-компилятор для генерации C / struct , TAL / struct, Pascal / Record , Fortran / named-commons или COBOL / Record объявлений, которые могут затем быть "включены" при компиляции программы C (или TAL / Pascal / Fortran / COBOL). Язык DDL упрощает создание и совместное использование библиотек на разных языках. Вывод DDL может также использоваться как для шунтирования данных на / с диска, так и в межпроцессных сообщениях , что позволяет легко обмениваться данными между программами, написанными на разных языках.

Некоторые близкие современные примеры:

C ++ разрешает прямой импорт файлов заголовков C, например:

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

Python специально разрешает синтаксический анализ библиотек GTK C и генерацию модулей оболочки Python с PyGTK-Codegen через файлы "Defs":

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

В некотором смысле RPC s половина решают проблему IPC между различными архитектурами ЦП. Но не проблема объявления локальных привязок данных к другим языкам.

В первом случае был бы полезен синтаксический анализ с открытым исходным кодом только для C, генерирующего XML (и один из java - реальный бонус). Если этот парсер уже в крупном дистрибутиве Linux, то даже лучше.

Я обнаружил сводку Parser по адресу: Инструменты привязки данных XML

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Цитата:

SWIG - это инструмент разработки программного обеспечения, который соединяет программы, написанные на C и C ++ , с различнымиязыки программирования высокого уровня.SWIG используется с различными типами целевых языков, включая распространенные языки сценариев, такие как Perl , PHP , Python , Tcl и рубин .В список поддерживаемых языков входят также языки без сценариев, такие как C # , Common Lisp ( CLISP , Allegro CL , CFFI , UFFI ), D , Go язык , Java , Lua , Modula-3 , OCAML , Октава , Щука (?) И R .Также поддерживаются несколько интерпретированных и скомпилированных реализаций Scheme ( Guile , MzScheme / Racket , Chicken ).

SWIG чаще всего используется для создания высокоуровневых интерпретируемых или скомпилированных сред программирования, пользовательских интерфейсов и в качестве инструмента для тестирования и создания прототипов программного обеспечения C / C ++.SWIG обычно используется для анализа интерфейсов C / C ++ и генерации «связующего кода», необходимого для вызова вышеуказанных целевых языков в код C / C ++.SWIG также может экспортировать свое дерево разбора в виде XML и Lisp s-выражений .

Поддержка:

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

Также: Для Сериализация C может использоваться пакет "Cerialization" (s11n / c11n) .Он включает в себя funtxt (текст), funxml (базовый диалект XML), simplexml (более простой диалект XML), компактный (не человек), parens ( emacs -friendly), wesnoth , expat , sqlite & mysql .

0 голосов
/ 23 февраля 2011

Я не уверен, что вы хотите, но может быть Antlr может использоваться для этой цели, и уже есть грамматика , написанная для C , так что вы можете напрямую использовать эту.

0 голосов
/ 23 февраля 2011

мой друг анализирует файлы C вручную через скрипт python и генерирует необходимый вывод через cog.

У ragel уже есть C-parser, но функция генерации должна быть добавлена ​​лично.

...