Adobe Alchemy возвращает структуры данных C - PullRequest
0 голосов
/ 19 июля 2011

У меня есть лексер / парсер (созданный из файла грамматики ANTLR), который (по соображениям производительности) я скомпилировал в код C, который будет включен в мой проект ActionScript с использованием Adobe Alchemly.

Синтаксический анализатор сгенерирует абстрактное синтаксическое дерево (In C) из входной строки (переданной из Actionscript) - я хочу вернуть C AST обратно в actionscript для дальнейшей обработки. Как я могу преобразовать древовидную структуру AST в формат, который я могу вернуть в actionscript?

Спасибо

1 Ответ

1 голос
/ 19 июля 2011

К сожалению, вы не можете просто отправить структуру данных Си.У вас есть три варианта, в порядке возрастания безумия:

  1. Сериализация данных на стороне C и восстановление их на стороне AS3.
  2. Упаковка данных в объекты иверните их.
  3. Передайте указатель и размер обратно в AS3 и извлеките данные из барана Altemy ByteArray.

Я включаю только 3 для полноты - я думаю, чтосумасшедший, чтобы попробовать это для любой сложной структуры данных.Код был бы хрупким.Следующие указатели были бы неуклюжими.Bleah.

Для # 2 вы можете использовать динамические объекты (через AS3_Object) или конкретные (через AS3_Get, AS3_New).Это довольно сложный код также и не так быстро.Может быть трудно поддерживать.

Для # 1 важен тип сериализации.Вы могли бы сделать так, чтобы ваш код на C отображал структуры в двоичный файл, возвращал его и AS3 анализировал формат файла через ByteArray.Или вы можете отобразить его в XML и сделать так, чтобы XML-класс AS3 анализировал его.Преимущество в том, что он довольно быстрый (так как XML реализован изначально), по крайней мере, в конце десериализации.Если у вас есть быстрый рендерер XML на стороне C (или, хм, sprintfs), это не так уж и плохо.

...