Javascript C 输出的代码生成器?

Javascript code generator for C output?

我想在 JSON 中定义一个模式,并为符合该模式的 encode/decode 流生成 C 文件。一个简化的例子...

JSON 对象...

var schema = {
   version: 1,

   objectA: {
      key: 0,
      type: "uint32_t",
      defaultValue: 42
   },

   objectB: {
      key: 1,
      type: "int16_t",
      defaultValue: -128
   },

   objectC: {
      key: 2,
      type: "double"
      defaultValue: "3.1415926"
   }
};

...将生成 C 头文件...

#define SCHEMA_VERSION (1)

typedef enum keys
{
   key_objectA = 0,
   key_objectB = 1,
   key_objectC = 2,
   KEY_COUNT
} keys_t;

typedef uint32_t objectA_t;
typedef int16_t objectB_t;
typedef double objectC_t;

typedef union univ_value
{
   objectA_t objectA;
   objectB_t objectB;
   objectC_t objectC;
} value_t;

result_t encode(char * ostream, keys_t key, value_t * value);
result_t decode(char * istream, keys_t key, value_t * value);

...和相应的 C 源文件(将包含作为数组的默认值,为简洁起见省略)。

是否有代码生成库(最好在 Javascript 中)我可以使用它来生成头文件和源文件内容?

需要说明的是, 我不想直接输入 JSON;相反,理想情况下,能够做某事(在 Javascript 中),例如:

var headerOutput;

headerOutput += dreamCGenerator.appendMacro("define", {
                    symbol: "SCHEMA_VERSION",
                    value: schema.version
                });

headerOutput += dreamCGenerator.appendEnum(...);

// etc...

在 research/reading 之后,我倾向于使用像 handlebars 这样的模板引擎来生成 C header/source 文件。这似乎是使 C 语法远离 Javascript-land...

的最佳方法

你不想使用 protobuf:

https://developers.google.com/protocol-buffers/

您的架构将非常JSON,并且您可以为多种语言生成代码。还允许可选字段和必填字段。