C 如何强制野牛到某一行并从该行解析?

C 如何强制野牛到某一行并从该行解析?,c,parsing,compiler-construction,bison,C,Parsing,Compiler Construction,Bison,我还在做我的简单语言解析器,我想知道你是否可以“强迫”野牛从某一行解析。我的意思是如果有一些代码,例如: int avar = 7 int bvar = 10 log avar log bvar 我想让bison在所有的行中搜索,无论它在哪里看到提到的avar,或者在哪里看到提到的bvar,都去第1行。显然,这是一个非常简单的任务,具有简单的标识符(还有其他方法可以做到这一点),但我在想,您是否可以编写一个可以再次转到该行的c函数。我认为这在循环或用户定义函数中很有用。您是否可以使用另一个c函

我还在做我的简单语言解析器,我想知道你是否可以“强迫”野牛从某一行解析。我的意思是如果有一些代码,例如:

int avar = 7
int bvar = 10
log avar
log bvar
我想让bison在所有的行中搜索,无论它在哪里看到提到的
avar
,或者在哪里看到提到的
bvar
,都去第1行。显然,这是一个非常简单的任务,具有简单的标识符(还有其他方法可以做到这一点),但我在想,您是否可以编写一个可以再次转到该行的c函数。我认为这在循环或用户定义函数中很有用。您是否可以使用另一个c函数通过使用flex中的lineno变量转到该行,或者是否有内置函数。如果您必须使用c函数,您将如何告诉bison再次解析它?是否会使用yyparse()和yylex()方法? 我想答案会很简单,但我对bison、flex和c编程还很陌生,所以如果有任何帮助,我将不胜感激。先谢谢你

第一次编辑

这不是我的实际语言的一部分,我的实际语言仍处于非常早期的简单阶段。我只是想知道如果我的语言发展到未来的阶段,将来是否有可能做到这一点。我所说的更好的例子是在这个循环中:

int x = 0
begin loop 
x = x + 1
log x
end loop if x > 10

是否有可能引用某一行的yylex和yyparse。例如,bison规则将执行语句,如果end语句为true,它将停止,否则它将返回到第3行,并继续执行,直到答案正确为止。这是否可以实现?

第一个问题:第1行包含avar,因此您希望再次解析第1行,该行显然仍然包含avar,因此您希望再次解析第1行,该行。。。。没有结束。第二个问题:如果行的顺序不正确,并且log avar在int avar=7之前,因为您不知道int avar=7在哪里(可能不存在),那么如何“跳转”到该行,以及绕过的行呢?如果您认为您的问题不是您的真实问题,而是为解决真实问题而创建的错误问题,请在解析时告诉我(按顺序)一个包含您自己语言的文件,您需要记住读取的表单,以便以后能够处理它们。这是编译器/解释器所做的这不是我语言的一部分。我只是想知道这是否可能,因为我可能需要这样做来实现循环和用户定义的函数。Bison不读取行。您编写了一个名为yylex的函数,它读取行。因此,如果您想让解析器再次读取同一行,您需要让它这样做。@我坚持认为,如果您走错了方向,您需要读取并保存所有文件请注意,flex/bison中不存在单独的“行”,只有当您对换行符有特殊管理时,行才会存在