用于C输出的Javascript代码生成器?

时间:2015-08-21 04:00:12

标签: javascript c metaprogramming code-generation

我想在JSON中定义一个模式,并生成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...

2 个答案:

答案 0 :(得分:1)

经过更多的研究/阅读,我倾向于使用像handlebars这样的模板引擎来生成C头/源文件。这似乎是保持C语法不受Javascript-land ...

的最佳方法

答案 1 :(得分:0)

你宁愿使用protobuf:

zerodevx

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