private void Terminal(Program program) throws Exception{
        while (cToken.getTipo() == Token.TokenType.Terminal) {
            Terminals terminal = new Terminals();
            cToken = lex.getNextToken();

            if (cToken.getTipo() == Token.TokenType.Identifier) {
                String type = cToken.getLexema();
                cToken = lex.getNextToken();
                Boolean containsLess = false;
                if (cToken.getTipo() == Token.TokenType.Less) {
                    containsLess = true;
                    type += cToken.getLexema();
                    cToken = lex.getNextToken();

                    if (cToken.getTipo() == Token.TokenType.Identifier) {
                        type += cToken.getLexema();
                        cToken = lex.getNextToken();

                        if (cToken.getTipo() == Token.TokenType.Great) {
                            type += cToken.getLexema();
                            cToken = lex.getNextToken();
                        } else {
                            Error("Se esperaba token '>'");
                        }
                    } else {
                        Error("Se esperaba ID");
                    }
                }
                
                if( cToken.getTipo() == Token.TokenType.Comma || cToken.getTipo() == Token.TokenType.Semicolon){
                    if( containsLess )
                            Error("Identificador de terminal no puede contener '<' o '>'");
                    terminal.setId(IdList());
                    terminal.AddValue(type);
                }else{
                    terminal.setType(type);
                    terminal.setId(IdList());
                }

                if (cToken.getTipo() == Token.TokenType.Semicolon) {
                    cToken = lex.getNextToken();
                } else {
                    Error("Se esperaba simbolo ';'");
                }
                
                program.AddTerminal(terminal);
            }
        }
    }