fineamy 发表于 2008-07-19 15:23

疑惑,关于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'?

cjaizss 发表于 2008-07-19 15:34

我想,如果把这里的error换成A,你会想的更明白一点吧

fineamy 发表于 2008-07-19 15:57

谢谢,大概明白了!

但对错误恢复机制还不是非常清楚。
另外,看来error由词法或语法分析出。如果出了error,分析器是如何做错误处理。是一直丢弃直到看到‘error’后的语法元素吗。
比如
| K_for '(' lpvalue '=' expression ';' error ';'
          lpvalue '=' expression ')' statement
这里error,那么就一直丢弃直到看到了 ';'。

run_xiao2000 发表于 2008-07-21 11:59

通常会一直丢弃直到碰到FIRST集合或FOLLOW集合的符号,前一种重新开始分析当前非终结符,后一种直接进入分析下一个符号:mrgreen: :mrgreen:
页: [1]
查看完整版本: 疑惑,关于bison语法分析的错误处理!