从脚本生成C代码:如何模板化?

问题描述 投票:0回答:3

我正在寻找一种将一些自动生成的代码插入到 C 源文件中的方法。代码生成是在 python 中进行的,这不是问题,关键在于如何用生成的代码替换/更新现有 C 代码中的代码块。我正在寻找一个与 C 语法兼容的模板库(模板语句可以隐藏在注释中),并且其中模板和扩展模板可以是同一个东西。

包含待更新代码的示例 C 文件:

// start generated block (blockname)
... some code here
// end generated block (blockname)

Python 伪代码示例:

replace_code_in_c_file(filename, blockname, new_code)

运行此命令后, // 注释保持不变,但代码块将被新代码替换。

python c templates code-generation
3个回答
1
投票

让我解释一下一个技巧。 Jinja2 是一个模板脚本,可以从模板生成文本。您需要做的是编写 C 代码模板 main.c.j2:


#include <stdio.h>

int main()

{

    printf("hello {{name}}.\n");

    return 0;

}

然后你可以使用 trans.py:

将其转换为 C 代码

import os

from jinja2 import PackageLoader, Environment, FileSystemLoader



TemplateLoader = FileSystemLoader(os.path.abspath("."))

env = Environment(loader = TemplateLoader)



template = env.get_template("main.c.j2")



print(template.render(name = "Jack"))

运行 python trans.py,您将在屏幕上看到以下 C 代码:


#include <stdio.h>

int main()

{

    printf("hello Jack.\n");

    return 0;

}

这是真正的C代码,{{name}}被替换为Jack。请参阅 Jinja2 文档了解更多有趣的功能。


0
投票

这可以使用 Python 中的 re 库 来完成。

搜索区块名称并将其替换为新区块:

re.sub(f"// start generated block \({blockname}\).*// end generated block \({blockname}\)", new_code, fileContents, flags=re.DOTALL)

-1
投票

你可以试试https://aicodeconvert.com,它可以将代码语言转换为c代码

© www.soinside.com 2019 - 2024. All rights reserved.