2011-10-17 44 views
0

什麼是這些關鍵字的含義:如何在C++中使用lex或yacc中的移位,減少,錯誤,接受和衝突關鍵字?

shiftreduceerroraccept,?

請給每個的完整描述。

switch (oAction) 
{ 
    case SSYaccAction::shift: 
     oElement = shift(lookahead()); 
     if (!oElement) return SSTrue; 
     oElement->oLexeme = lookahead(); 
     oElement->oulState = state(); 
     push(); 
     if (getLexeme()) return SSTrue; 
     oulError++; 
     break; 
    case SSYaccAction::reduce: 
    oElement = reduce(production(), productionSize()); 
     if (!oElement) return SSTrue; 
     pop(productionSize()); 
     if (goTo(leftside())) return SSTrue; 
     break; 
    case SSYaccAction::error: 
     oError = SSTrue; 
     if (error(state(), lookahead())) 
     return SSTrue; 
     oulError = 0; 
     break; 
    case SSYaccAction::accept: 
     return accept(); 
    default: 
     throwException(SSExceptionYaccParse, SSYaccMsgParse); 
     return SSTrue; 

在上面的代碼,什麼是

lookahead() 

reduce(production(), productionSize()) 
+1

您是否試過閱讀Yacc [文檔](http://dinosaur.compilertools.net/yacc/)?這包含上面的一個清晰的解釋,以及許多其他信息讓你開始。 – EkcenierK

+0

不...讓我看看.. Thanx ... – Ratikant

+0

對不起,鏈接錯了,我現在更新了! – EkcenierK

回答