gpt4 book ai didi

c - 我的语法中的函数定义有问题

转载 作者:行者123 更新时间:2023-12-03 00:02:18 24 4
gpt4 key购买 nike

我的 C 语法中的函数定义有问题,可以在此处找到 http://www.archive-host.com/files/1959635/24fe084677d7655eb57ba66e1864081450017dd9/cAST.txt ,它的定义不正确,我无法将它乘以某些东西。我要输入的代码是这个:

int factorielle(int n)
{ int x;
if ( n == 0)
return 1;
else return n*factorielle(n-1);
}

函数定义是这样的:

function_definition
: declaration_specifiers declarator compound_statement
| declarator compound_statement
;

declaration_specifiers 应该链接到 int ,声明符应该链接到 Factorielle(int n),为此我替换了这个:

direct_declarator
: ID ((direct_declarator '[' ']') | (direct_declarator '(' parameter_type_list ')') | (direct_declarator '(' identifier_list ')') | (direct_declarator '(' ')') )*

direct_declarator
: ID ((direct_declarator '[' ']') | (direct_declarator '(' parameter_type_list ')') | (direct_declarator '(' identifier_list ')') | (direct_declarator '(' ')') | '(' parameter_type_list ')' )*

但这并没有多大帮助。

至于乘法,我不知道如何在不带来冲突的情况下进行。请问有办法解决这个问题吗?

最佳答案

使用纯 ANTLR 的纯语法来解析真正的 C 代码可能会遇到困难。

原因是certain declarations look like legitimate executable statements 。 (虽然引用的答案似乎是关于 LR(1) 解析器的,但它实际上是关于无法处理歧义的解析器的;ANTLR 不能)。

区分它们的唯一方法是使用早期符号声明中提供的上下文信息。因此,您必须在解析时收集符号类型,并检查语法规则简化中的信息,以确定此类实例是语句还是声明。 (我不知道如何在 ANTLR 中实现这一点,尽管我相信这是可能的)。

关于c - 我的语法中的函数定义有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304788/

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