ANTLR4 C语法不支持_cdecl?
我正在运行ANTLR 4.2,并使用以下标准C语法:ANTLR4 C语法不支持_cdecl?,c,antlr,antlr4,C,Antlr,Antlr4,我正在运行ANTLR 4.2,并使用以下标准C语法: 我正在执行以下步骤:(使用ANTLR4手册中的批处理文件) antlr C.g4 javac*.java grun C CompliationUnit-令牌测试.C 其中,test.c具有以下代码: 传球: typedef void (*EFI_SET_MEM) ( void *Buffer, UINTN Size, UINT8 Value ); 失败: 错误是:第3:9行输入“typedefvo
我正在执行以下步骤:(使用ANTLR4手册中的批处理文件)
typedef
void
(*EFI_SET_MEM) (
void *Buffer,
UINTN Size,
UINT8 Value
);
失败:
错误是:第3:9行输入“typedefvoid(uu cdecl*”处没有可行的替代方案”
唯一的区别是。我尝试了几个更改来修复此问题,例如:
functionSpecifier
: ('inline'
| '_Noreturn'
| '__inline__' // GCC extension
| '__cdecl'
| '__stdcall')
| gccAttributeSpecifier
| '__declspec' '(' Identifier ')'
;
…但这不起作用。有没有关于如何解决此问题的想法?因为我所做的不关心调用约定,创建此lexer规则可以解决此问题:
Cdecl
: '__cdecl'
-> skip
;
<>我希望我有一个真正的解决方案。 < p> <代码> cDECL>代码>,用C++来声明接口,使用链接的C++调用约定(明确地用未修饰的名称等)。<代码>
我不确定您提出的修复方案为什么不起作用,tho。谢谢JohnH。我同意它是特定于供应商的,我看到Microsoft和IBM都在使用它。我使用的是Microsoft编译器,它用在C(不是C++)代码中。
Cdecl
: '__cdecl'
-> skip
;