最近在折腾写一个小编译器, 我不是科班出身,没学过编译原理,所以想偷个懒问问大家.
我现在在写 parser. 解析类型或变量 /函数声明,也就是像:
typedef unsigned short u16;
int abc;
int main(int argc, char *argv[]);
之类的 statement,感觉用不着语法树.把"u16"放到类型名称的 name space 里(一个 map),把"abc","main",放到变量 /函数的 name space 里(公用另一个 map),就行了吧?
怀疑用 AST,是因为今天写了句:
int (abc);
这样奇怪的变量声明, gcc 竟然也编译过了, 我想 gcc 的作者不会无聊到专门处理小括号,是不是在 AST 里顺便把这对小括号干掉了?
准备去 github 上扒个开源的小编译器读, 有相关经验的朋友可否先指点我一下.
我现在在写 parser. 解析类型或变量 /函数声明,也就是像:
typedef unsigned short u16;
int abc;
int main(int argc, char *argv[]);
之类的 statement,感觉用不着语法树.把"u16"放到类型名称的 name space 里(一个 map),把"abc","main",放到变量 /函数的 name space 里(公用另一个 map),就行了吧?
怀疑用 AST,是因为今天写了句:
int (abc);
这样奇怪的变量声明, gcc 竟然也编译过了, 我想 gcc 的作者不会无聊到专门处理小括号,是不是在 AST 里顺便把这对小括号干掉了?
准备去 github 上扒个开源的小编译器读, 有相关经验的朋友可否先指点我一下.