疑惑,关于bison语法分析的错误处理!
statement: K_for '(' lpvalue '=' expression ';' expression ';'
error ')' statement
{ $$ = 0;
yyerror(@1, "error: Error in for loop step assignment.");
}
| K_for '(' lpvalue '=' expression ';' error ';'
lpvalue '=' expression ')' statement
{ $$ = 0;
yyerror(@1, "error: Error in for loop condition expression.");
}
| K_for '(' error ')' statement
{ $$ = 0;
yyerror(@1, "error: Incomprehensible for loop.");
}
请问:
1.这里的error的检测是由词法分析完成的?
2.语法分析中这里'error'会否同时压入语法分析栈。即'error'会否作为移入或归约操作的一部分?
3.语法分析中会否产生'error'? 我想,如果把这里的error换成A,你会想的更明白一点吧
谢谢,大概明白了!
但对错误恢复机制还不是非常清楚。另外,看来error由词法或语法分析出。如果出了error,分析器是如何做错误处理。是一直丢弃直到看到‘error’后的语法元素吗。
比如
| K_for '(' lpvalue '=' expression ';' error ';'
lpvalue '=' expression ')' statement
这里error,那么就一直丢弃直到看到了 ';'。 通常会一直丢弃直到碰到FIRST集合或FOLLOW集合的符号,前一种重新开始分析当前非终结符,后一种直接进入分析下一个符号:mrgreen: :mrgreen:
页:
[1]