【发布时间】:2016-02-23 15:54:00
【问题描述】:
我正在为命题逻辑编写一个解析器(不管那是什么,重点是我正在解析一种简单的语言),最初是从以下形式的函数开始的:
int formula() {
int store = step;
if(compound())
return TRUE;
else {
if(atom())
return TRUE;
else if(negation() && formula())
return TRUE;
else {
step = store;
return FALSE;
}
}
}
int compound() {
int store = step;
if(open() && formula() && binary_operator() && formula() && close())
return TRUE;
else {
step = store;
return FALSE;
}
}
上面没有提到的功能是基本情况——这些是重要的部分。公式可以有子公式,这些子公式又可以是包含子公式的复合公式,以此类推。
我尝试返回 1 和 0(真假)的字符序列,而不是整数。如果返回一个序列,则表示输入可以生成一个序列(必须有效)。否则,返回 null。
问题是每次我尝试指针都会丢失 - 我知道这与堆栈(?)有关,并且当函数返回任何内容时指针会“死亡”。我没有尝试过数组,因为有人告诉我,数组静态工作效果最好,而这些数组的大小将是动态的(大小取决于变量的数量,仅在运行时找到)。
有什么办法可以做到这一点?我不能 malloc 任何东西,因为我无法释放它 - 在我能够释放它之前,需要返回 1 和 0 的序列。也许传递带有序列字段的结构,尽管我不确定这是否会遇到同样的问题。
非常感谢任何帮助。这是一个使用 C99 的程序。欢迎任何关于澄清的建议!
【问题讨论】:
-
C 不支持方法,只支持函数!并使用原型函数声明器。旧式的已弃用。
-
为什么不能在工作完成后释放
malloced 内存。不必在同一个函数中释放它。 -
"此外,数组在使用后仍然是指针。"不,它仍然是一个数组。如果它是一个指针,它将被称为“指针”。如果您对 C 概念有疑问,您应该在开始此级别的项目之前阅读 C 书籍。
-
@DanielSoutar 回到告诉你的那个人,然后用一些东西打他们。最好有尖尖的东西。
-
这里的人有点迂腐。虽然数组只是一个连续的元素序列,但数组绑定的变量的值通常会在代码中隐式转换为指针类型。这就是为什么
char string[] = "abc"; printf("%s\n", string);起作用的原因。
标签: c parsing pointers recursion char