我想在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...
答案 0 :(得分:1)
经过更多的研究/阅读,我倾向于使用像handlebars这样的模板引擎来生成C头/源文件。这似乎是保持C语法不受Javascript-land ...
的最佳方法答案 1 :(得分:0)