返回
yyparse()
时,Bison0
功能停止读取其输入(文件或流)。
我想知道在发生之后是否还有一种方法可以执行更多命令。
我的意思是,可以在野牛文件中踩入0
(或返回的某些[[token]吗?]
Flex
<<EOF>> { return 0; }
野牛
%token start
start : start '0' {
// Desired something else
}
program
是语法中的顶级符号。也就是说,非终结符必须与解析器的输入匹配。当然,在输入终止之前,program
也可能会被匹配多次。例如,语法可能类似于:
%start program
%%
program: %empty
| program declaration
在该语法中,无法注入仅在完全解析输入后才执行的动作。我收集到的是您要执行的操作。但是创建一个非终结符非常简单,在解析结束时,该终结符的动作将只执行一次。我们需要做的就是在语法顶部插入一个新的“单元产品”:
%start start %% start : program { /* Completion action */ } program: %empty | program declaration
由于start
不会出现在语法的任何形式的右侧,因此只能在分析器的末尾(当解析器将%start
符号简化时才将其缩减)。因此,即使生产中没有明确包含结束标记,我们也知道执行减少操作时,结束标记是超前标记。[单位产品-右侧仅包含一个符号的产品-通常用于在解析的关键点触发动作,而以上只是该技术的一个示例。