Jav*_*Man 3 c++ compiler-construction annotations
我想在我的C++源代码中创建自己的自定义注释(就像Java样式注释一样).由于标准C++语法不允许注释,我想根据自己的需要修改/增强编译器.
但Visual Studio是否公开其编译器内部供用户修改(例如其词法分析器的输出,抽象语法树等)?如果没有,是否有任何第三方工具来解析c ++语法并允许我根据自己的注释发出我自己的自定义c ++源代码?
像这样的问题的标准解决方案,如果它面对的是非C++的编程语言,就是编写一个自定义预处理器来理解有问题的语言的一些子集和你的注释,重写删除了注释的代码,然后是传递给实际的语言编译器.
这是扩展语言的标准方法:在编译器之前添加预处理步骤.
不幸的是,仅仅解析功能完整的C++ 几乎是不可能的; 处理C++源代码几乎总是最终创建一个完整的AST生成器,因为分析语言功能有些繁琐.
看看这些声明:
template<bool b, class T> void foo(T &t){if(b) T.do_this(); else T.do_that();}
class foobar { public: virtual void do_this(); virtual void do_that(); };
class barfoo : public foobar { public: virtual void do_this(); virtual void do_that(); };
Run Code Online (Sandbox Code Playgroud)
现在这个功能
void bar(float l){ barfoo t; foo<fsqrt(l) > 1, foobar>(t); }
Run Code Online (Sandbox Code Playgroud)
这里的问题是,对于模板和模板参数的比较,括号具有双重含义.决定每个括号所属的唯一方法是需要完整的语法树.
我只知道你所描述的一个这样的工具:Qt工具包的MOC,做你的建议:用关键字signal和slot注释的C++代码.Qt是开源的,因此查看MOC的来源可能是个好主意.
编写和阅读C++确实非常困难.