Как использовать смещение, уменьшение, ошибки, принимать и конфликтовать ключевые слова в lex или yacc в c ++? - PullRequest
0 голосов
/ 17 октября 2011

Каковы значения этих ключевых слов:

shift, reduce, error, accept, conflict?

Пожалуйста, дайте полное описание каждого.

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 Ответ

0 голосов
/ 14 февраля 2015

( ответил в комментариях. )

@ KLibby писал:

Вы пытались читать документацию по Yacc ?Это содержит четкое объяснение вышеизложенного и много другой информации, с которой можно начать.

...