【发布时间】:2012-03-08 00:54:02
【问题描述】:
我想实现一门新语言,我想用 C 语言来实现,使用著名的 flex+yacc 组合。好吧,问题是,编写整个 AST 代码非常耗时。有没有工具可以自动生成结构体的构造函数?
我想要具有以下行为的东西:
输入:
enum AgentKind {A_KIND1, A_KIND2};
typedef struct Agent_st
{
enum AgentKind kind;
union {
struct {int a, b, c} k1;
struct {int a, GList* rest} k2;
} u;
} Agent;
输出:
Agent* agent_A_KIND1_new(int a, b, c)
{
Agent* a = (Agent*)malloc(sizeof(Agent));
a->kind = A_KIND1;
a->k1.a = a;
...
...
return a;
}
Agent* agent_A_KIND2_new(int a, GList* rest)
{ ... }
谢谢!
【问题讨论】:
-
很多(很多很多)年前,我尝试了一个使用类似于 lex/yacc 的文件格式的工具,并且应该与这些工具一起使用,其目的是帮助创建和遍历AST。不幸的是我不记得这个名字了,我怀疑它是否会很容易再次找到。但至少存在(或已经存在)这样的工具。
-
如果你使用 emacs 或 Visual Studio 可以依靠 sn-ps 帮助你获得大量时间
标签: c compiler-construction constructor code-generation abstract-syntax-tree