san*_*dra 10 c python django templates django-templates
我最近为我的C++应用程序(QT)编写了一个简单而小巧的嵌入式HTTP服务器,我和Ry的http解析器一起玩了一下并喜欢它.这家伙很疯狂.
所以我告诉自己:"嘿!为什么不将django模板引擎移植到C?" 那真棒!我知道,这不是一件容易的事(根本不是,我知道),但我真的很想实现这一点.所以我来到这里寻求灵感,想法,意见......
我真的很想对这个主题,想法,已经完成的事情,我将遇到的哪些主要问题(以及如何解决它们)提出一些指示 - 如何不重新发明轮子......无论如何,你有了这个想法:)
万分感谢!
PS简单的代码片段,以及工具和库的链接是非常受欢迎的!
PPS我已经知道了grampe,我看了看它的来源.嗯...这是C++,它特定于Qt.
嗯,我不明白为什么django模板代码中的任何东西都难以在C中实现.模板语法看起来有点pythonic,但它实际上并不是python; 他们为它实现了自己的解析器.所以首先要看的是python中的django模板实现.这真的不是很多代码,而且它很容易理解.
当然,C会更加冗长.你正在编写的只是一个编译器:它读入一些代码(django模板)并用另一种语言(html)写出一些代码.因此,您可以找到有关在C中编写编译器的所有文档(即标记符+解析器+代码生成器)是相关的.
首先,您可能希望生成语法树.django模板的语法是非常规则的...每个{% whatever %}
块都有一个相应的{% endwhatever %}
块,所以你的解析器实际上可以生成树而不知道所有whatever
关键字可能是什么.
然后,您遍历树,为每个块执行"代码生成"阶段.例如,您可以{% if %}
通过检查if参数的值来打开codegen ,并打印其内容或不打印任何内容,具体取决于if子句是true还是false.等等while循环,过滤器,块等.
请注意,这一切都是很多工作......你是否考虑过在你的C程序中嵌入一个python解释器?(说真的!这并不难,因为python解释器是开源的.)
归档时间: |
|
查看次数: |
1929 次 |
最近记录: |