gpt4 book ai didi

c - ANTLR4 C 语法不支持 __cdecl?

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:35 25 4
gpt4 key购买 nike

我正在运行 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 -tokens test.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 ')'
;

...但这不起作用。关于如何解决此问题的任何想法?由于我所做的并不关心调用约定,因此创建此词法分析器规则会使问题消失:

Cdecl
: '__cdecl'
-> skip
;

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

最佳答案

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

不过,我不确定为什么您建议的修复不起作用。

关于c - ANTLR4 C 语法不支持 __cdecl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23069062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com