ANTLR4 C语法不支持__cdecl



我正在运行ANTLR 4.2,并使用来自以下位置的规范C语法:
https://github.com/antlr/grammars-v4/tree/master/c

我正在做以下步骤:(使用ANTLR4书中的批处理文件)

  1. antlr C.g4
  2. javac C*.java
  3. grun C compilationUnit-令牌测试.C

其中test.c具有以下代码:

通过:

typedef
void
(*EFI_SET_MEM) (
   void     *Buffer,
   UINTN    Size,
   UINT8    Value
  );

失败:错误为:第3:9行在输入"typedefvoid(__cdecl*'"处没有可行的替代方案

typedef
void
(__cdecl *EFI_SET_MEM) (
   void     *Buffer,
   UINTN    Size,
   UINT8    Value
  );

唯一的区别是__cdecl。我尝试了几个更改来解决这个问题,例如:

functionSpecifier
    :   ('inline'
    |   '_Noreturn'
    |   '__inline__' // GCC extension
    |   '__cdecl'
    |   '__stdcall')
    |   gccAttributeSpecifier
    |   '__declspec' '(' Identifier ')'
    ;

但这不起作用。关于如何解决这个问题有什么想法吗?由于我所做的并不关心调用约定,因此创建这个lexer规则可以消除问题:

Cdecl
    :   '__cdecl'
        -> skip
    ;

我仍然希望我有一个真正的解决方案。

__cdecl在C++中用于将接口声明为使用C调用约定进行链接(显式地使用未修饰的名称等)。__cdecl是C++(我相信这是特定于某些编译器的),而不是C,所以C语法没有指定它

我不知道为什么你提出的解决方案不起作用,tho。

相关内容

  • 没有找到相关文章

最新更新