我将完整的c++语法复制到解析器生成器中,但在解析C++声明时遇到了问题。在解析指针类型声明(如decl-specifier char* varname )时,我们应该如何解释
以MSDN的c++语法为例http://msdn.microsoft.com/en-us/library/0aah9xbf%28v=vs.71%29.aspx
说明者是这样的:
decl-specifiers :
decl-specifiersopt decl-specifier
decl-specifier :
storage-class-specifier
type-specifier
fct-specifier
friend
typedef
__declspec ( extended-decl-modifier-seq ) 根据msdn的描述char *lpszAppName;应该有一个decl-说明符= "char * ",name =但是我的测试运行表明,decl-说明符应该是char,声明符(即名称)应该是“* lpszAppName"。注意,星号在名称之前--而不是在类型关键字char后面。这个测试结果似乎是合理的,因为在decl-说明符下,我找不到定义指针的任何东西,即在decl-speciifer下没有任何规则可以导致ptr-operator.。
我使用ANTLR4解析器生成器进行了测试,从规范中复制了完整的c++语法来解析如下:
char *
testfunction(int *cx)
{
return;
}得到的解析树如下所示:

显然,返回类型"char *“实际上被解析为返回类型"char”,即decl-说明符下的节点,而*与函数名(即声明器下的节点)相关联。(int* cx )参数声明也被认为是"int“类型,而指针*是cx声明器下的节点。
我的测试正确吗?如果是,那么如果我们必须支持VisualC++特定的函数修饰符关键字,比如__cdecl、__stdcall或__fastcall,那么语法应该是什么样子的呢?
char * __fastcall
testfunction(int *cx)
{
return;
}显然,语法要求将"char*“真正视为一种类型,即抽象-声明器下的节点。
发布于 2013-04-30 01:05:24
考虑一下著名的char* x, y;声明。y是char,而不是char*。原因是*只适用于x。decl-specifier确实就是char。
https://stackoverflow.com/questions/16277506
复制相似问题