Beispiel #1
0
        public INode makeNode(MiniPLSymbol symbol)
        {
            switch (symbol)
            {
            case MiniPLSymbol.EXPRESSION:
                return(new ExpressionNode());

            case MiniPLSymbol.VAR_DECLARATION:
                return(new VarDeclarationNode());

            case MiniPLSymbol.VAR_ASSIGNMENT:
                return(new VarAssignmentNode());

            case MiniPLSymbol.FOR_LOOP:
                return(new ForLoopNode());

            case MiniPLSymbol.ASSERT_PROCEDURE:
                return(new AssertNode());

            case MiniPLSymbol.PRINT_PROCEDURE:
                return(new PrintNode());

            case MiniPLSymbol.READ_PROCEDURE:
                return(new ReadNode());

            case MiniPLSymbol.PROGRAM:
                return(new ProgramNode());

            case MiniPLSymbol.STATEMENT_LIST:
                return(new StatementListNode());

            default:
                return(new DummyNode <MiniPLSymbol>(symbol));
            }
        }
 public void tryToRecoverFromException(MiniPLSymbol symbol, Func <INode> procedureMethod)
 {
     if (nextTokenShouldEndRecovery(symbol))
     {
         return;
     }
     do
     {
         readToken();
         Token <MiniPLTokenType> goodToken = this.tokenReader.token();
         if (goodToken != null)
         {
             if (symbolInFirst(symbol, goodToken.getType()))
             {
                 procedureMethod();
                 return;
             }
             if (symbolInFollow(symbol, goodToken.getType()))
             {
                 return;
             }
             if (nextTokenShouldEndRecovery(symbol))
             {
                 return;
             }
         }
     } while(this.tokenReader.hasNextToken());
 }
 private bool isTokenInFirst(MiniPLSymbol symbol)
 {
     if (tokenReader.token() != null)
     {
         return(firstAndFollow.firstContains(symbol, tokenReader.token().getType()));
     }
     else
     {
         return(false);
     }
 }
 public ICollection <MiniPLTokenType> first(MiniPLSymbol symbol)
 {
     if (firstMap.ContainsKey(symbol))
     {
         return(firstMap[symbol]);
     }
     else
     {
         return(new HashSet <MiniPLTokenType>());
     }
 }
 public bool firstContains(MiniPLSymbol symbol, MiniPLTokenType tokenType)
 {
     if (firstMap.ContainsKey(symbol))
     {
         return(firstMap[symbol].Contains(tokenType));
     }
     else
     {
         return(false);
     }
 }
 private ICollection <MiniPLTokenType> first(MiniPLSymbol symbol)
 {
     return(firstAndFollow.first(symbol));
 }
 private INode makeNode(MiniPLSymbol symbol)
 {
     return(this.nodeCreator.makeNode(symbol));
 }
 private void recover(MiniPLSymbol symbol, Func <INode> procedureMethod)
 {
     recoveryHandler.tryToRecoverFromException(symbol, procedureMethod);
 }
 private void exceptionRecovery(MiniPLException exception, MiniPLSymbol symbol, Func <INode> procedureMethod)
 {
     logError(exception);
     failSyntax();
     recover(symbol, procedureMethod);
 }
 private bool nextTokenShouldEndRecovery(MiniPLSymbol symbol)
 {
     return(this.tokenReader.hasNextToken() && this.firstAndFollow.followContains(symbol, this.tokenReader.getNextTokensType()));
 }
 private bool symbolInFirst(MiniPLSymbol symbol, MiniPLTokenType miniPLTokenType)
 {
     return(this.firstAndFollow.firstContains(symbol, miniPLTokenType));
 }